Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate模板中执行更新(命名查询)?_Java_Hibernate - Fatal编程技术网

Java 如何在Hibernate模板中执行更新(命名查询)?

Java 如何在Hibernate模板中执行更新(命名查询)?,java,hibernate,Java,Hibernate,我有一个命名查询,如下所示: @NamedQueries ({ ... @NamedQuery(name = "myUpdate", query = "update User set country = 'EN' where user.id = :id") UPDATE User u, Profile p SET u.country = 'EN' where p.name = ? AND p.id = u.profile.id 。。。 }) 在dao层中 getHibernateTempl

我有一个命名查询,如下所示:

@NamedQueries ({ ...

@NamedQuery(name = "myUpdate", query = "update User set country = 'EN' where user.id = :id")
UPDATE User u, Profile p SET u.country = 'EN' where p.name = ? AND p.id = u.profile.id
。。。 })

在dao层中

getHibernateTemplate().bulkUpdate(...?)
更新

Query query = sessionFactory.getCurrentSession.getNamedQuery("myUpdate");
getHibernateTemplate.bulkUpdate(query.getQueryString(), id);
我得到一个错误:

Hibernate:更新用户,set country=EN,其中id=2343 ORA-00971:缺少set关键字

现在谁能解决这个问题

更新2

@NamedQuery(name = "myUpdate", query =
 "update User set country = 'EN' where
 user.profile.id = ?")


不正常:(

不幸的是,spring中缺少该功能,因为命名查询应该只用于检索数据

我会把它放在某种帮助器中,这样您的DAO逻辑就不必绕着spring运行了

编辑
用户和set“update Userset country=EN where”之间有一个悬空逗号

事实上,这是一个非常老的问题,但我今天也遇到了同样的问题。我意识到更新不起作用,因为在一个简单的更新中不能有连接。这也是添加逗号的原因。Hibernate尝试像这样重写查询:

@NamedQueries ({ ...

@NamedQuery(name = "myUpdate", query = "update User set country = 'EN' where user.id = :id")
UPDATE User u, Profile p SET u.country = 'EN' where p.name = ? AND p.id = u.profile.id
要解决这个问题,您需要自己从第二个表中选择ID

@NamedQuery(name = "myUpdate", query = ""
  + " UPDATE User u "
  + " SET country = 'EN' "
  + " WHERE u.profile.id IN ( "
  + "   SELECT p.id "
  + "   FROM Profile p "
  + "   WHERE p.name = ? "
  + " )"

它可以工作。谢谢!但不幸的是,我还有另一个问题。请参阅UPDATEThat。这很荒谬。我在那里没有逗号。查询与堆栈完全相同。:(如果hibernate添加了逗号,那么这很奇怪。你能得到
query.getQueryString()的结果吗)
?。如果这是正确的,请尝试查询
updateuser set country='EN',其中id=:id