我尝试使用jpa更新一个简单的表。我为它写了一个jpa namedquery
@NamedQuery(name="updatedetails",query="update myentity set enddesc=?, startdesc=? Where id=?")
我的代码如下
em.createNamedQuery("updatedetails",myentity.class).serParameter(1, "abcd").serParameter(2,"gjvg").serParameter(3, "gghjj").executeUpdate();
myentity是我的班级名称
它引发了以下错误
Encountered "=" at character but expected ["."] While parsing the query
查询有什么问题吗
答案 0 :(得分:2)
我认为JPA命名查询应该使用实际名称是参数占位符,而不是?
,后者在预准备语句中使用。所以这样的事情应该有效:
@NamedQuery(name="updatedetails",query="update myentity set enddesc = :enddesc, startdesc = :startdesc Where id = :id")
List<myentity> results = em.createNamedQuery("updatedetails", myentity.class)
.setParameter("enddesc", "abcd")
.setParameter("startdesc", "gjvg")
.setParameter("id", "gghjj")
.getResultList();
作为旁注,你应该让你的班级名字以大写字母开头,即称之为MyEntity
,而不是你现在的名字。
答案 1 :(得分:0)
em.createNamedQuery("updatedetails",myentity.class).serParameter(1, "abcd").serParameter(2,"gjvg").serParameter(3, "gghjj").executeUpdate();
应该使用serParameter
而不是setParameter
。
答案 2 :(得分:0)
在模型类
@NamedQuery(name = "new_ticket_bat.UpdateflagAutres", query = "UPDATE new_ticket_bat t set t.status_AUTRE='0' WHERE t.id= :id")
<br>
在您的服务类
static void updateflagAutres(String id) {
DataBaseTools dbTools = new DataBaseTools("databaseOv");
try {
Query q=dbTools.em.createNamedQuery("new_ticket_bat.UpdateflagAutres");
q.setParameter("id", id);
q.executeUpdate();
dbTools.em.getTransaction().commit();
dbTools.em.close();
} catch (Exception ex) {
ex.printStackTrace();
Tools.traiterException(Tools.getStackTrace(ex));
}
}