Как вставить значения в базу данных с помощью запросов с помощью диспетчера сущностей, сохраняемость с помощью класса java?

Я хочу, чтобы вставить данные в таблицу, используя следующий код

    public User registerUser(String usr, String pwd) {

    u=em.find(User.class,usr);
    if(u!=null)
    {
        return null;
    }
    String query1 = "insert into users values('" + usr + "','" + pwd +"')";
    Query q = em.createQuery(query1);
    u=em.find(User.class,usr);
    return u;

}

здесь 'u' объект User класс а em is EntityManager.

я получаю следующее исключение:

сервлет.service () для действия сервлета выдало исключение орг.зимовать.бумага HQL.АСТ.QuerySyntaxException: ожидание открытия, найдено "значения" возле строки 1, столбец 19 [вставить в значения пользователей ("pawan", "am")]

3 ответов


попробовать

public User registerUser(String usr, String pwd) {

    u=em.find(User.class,usr);
    if(u!=null)
    {
        return null;
    }

    //Now saving...
    em.getTransaction().begin();
    em.persist(u); //em.merge(u); for updates
    em.getTransaction().commit();
    em.close();

    return u;
}

Если PK является идентификатором, он будет установлен автоматически в вашем сохраненном классе, если вы используете стратегию автоматического создания (благодаря Дэвиду Виктору).

редактировать в @ aman_novice комментарий: установите его в свой класс

//Do this BEFORE getTransaction/persist/commit
//Set names are just a example, change it to your class setters
u.setUsr(usr);
u.setPwd(pwd);

//Now you can persist or merge it, as i said in the first example
em.getTransaction().begin();
(...)

о @ David Victor, извините, я забыл об этом.


вы не используете SQL, но JPAQL, нет полевой вставки. Вы сохраняете объект, а не вставляете строки.

вы должны сделать что-то вроде этого:

public User registerUser(String usr, String pwd) {
    u=em.find(User.class,usr);
    if(u!=null)
    {
        return u;
    }
    u = new User(usr, pwd);
    em.persist(u);
    return u;
}

это на самом деле не путь. Вы пытаетесь вставить строку в таблицу, но не имеете связанного вложенного объекта. Если вы используете диспетчер сущностей JPA - затем создайте новый экземпляр-установите свойства и сохраните сущность.

Э. Г.

User u = new User();
u.setXXX(xx);

em.persist(u);
// em.flush()   <<-- Not required, useful for seeing what is happening

// etc..

Если вы включите SQL loggging в спящем режиме и очистите объект, вы увидите, что отправляется в базу данных.

Е. Г. в упорстве.XML-код:

    <property name="hibernate.format_sql" value="true" />