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

标签 java hibernate

我有一个像这样的命名查询:

@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/

相关文章:

java - 如何在 libgdx 中重用帧缓冲区纹理

java - 如何从 Hibernate Session 获取 java.sql.Connection 对象

java - 应用程序仅在 Samsung Galaxy S7 Edge 上速度缓慢并出现 OutOfMemoryException

java - 如何使用docx4j设置下载的word文档的名称?

java - TabLayout 不会填充

java - 如何使用 hibernate 方法插入一行?

mysql - Hibernate Spring 编码字符集错误 [UTF-8]

java - 如何显示字体名称菜单项以相同的字体出现

java - JPA 查询 Postgres 中的 JSONB 列

java - 一对多 hibernate