我想使用以下代码将数据插入表中
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;
Run Code Online (Sandbox Code Playgroud)
}
这里'u
'是User
阶级的对象,em
是EntityManager
.
我得到以下异常:
用于servlet操作的Servlet.service()抛出异常org.hibernate.hql.ast.QuerySyntaxException:期待OPEN,在第1行第19列附近找到'values'[插入用户值('pawan','am')]
Ren*_*nan 16
尝试
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;
}
Run Code Online (Sandbox Code Playgroud)
如果PK是Identity,如果您使用自动生成策略,它将在您的持久化类中自动设置(感谢David Victor).
编辑为@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();
(...)
Run Code Online (Sandbox Code Playgroud)
关于@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;
}
Run Code Online (Sandbox Code Playgroud)