我有一个像这样的命名查询:
@NamedQueries ({ ...
@NamedQuery(name = "myUpdate", query = "update User set country = 'EN' where user.id = :id")
... })
在dao层
getHibernateTemplate().bulkUpdate(...?)
更新
Query query = sessionFactory.getCurrentSession.getNamedQuery("myUpdate");
getHibernateTemplate.bulkUpdate(query.getQueryString(), id);
我收到错误:
Hibernate:更新用户,设置国家= EN,其中 id = 2343 ORA-00971:缺少 SET 关键字
现在有人可以解决这个问题吗?
更新2
@NamedQuery(name = "myUpdate", query =
"update User set country = 'EN' where
user.profile.id = ?")
确定
@NamedQuery(name = "myUpdate", query =
"update User set country = 'EN' where
user.profile.name = ?")
不行:(
最佳答案
不幸的是,Spring 中缺少该功能,因为命名查询应该仅用于检索数据。你可以做的一件事是(这是一个解决办法)
Session session = getHibernateTemplate().getSession();
Query query = session.getNamedQuery("myUpdate");
String update = query.getQueryString();
getHibernateTemplate().bulkUpdate(update, [params]);
我会把它放在某种帮助程序中,这样你的 DAO 逻辑就不必绕着 spring 走。
编辑
User 和 set "update User , set country=EN where"之间有一个悬空逗号
关于java - 如何在 Hibernate 模板中执行更新(命名查询)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5367379/