使用jpa中的namedquery更新查询不能正常工作

时间:2016-12-20 04:15:36

标签: java jpa

我尝试使用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

查询有什么问题吗

3 个答案:

答案 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));
        } 
    }