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 User,set 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