Как вставить значения в базу данных с помощью запросов с помощью диспетчера сущностей, сохраняемость с помощью класса 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" />