为什么这个hibernate模板bulkUpdate不起作用

use*_*654 5 java oracle spring hibernate

Oracle 10g,Hibernate 3.4

此更新(基于long user.userId值)正确完成:

getHibernateTemplate().bulkUpdate("update Address address set address.preferred = 1 where address.user.userId = ?", 1l);
Run Code Online (Sandbox Code Playgroud)

这个(基于String user.language值)抛出一个异常ORA-00971: missing SET keyword:

getHibernateTemplate().bulkUpdate("update Address address set address.preferred = 1 where address.user.language = ?", "en");
Run Code Online (Sandbox Code Playgroud)

谁知道为什么?

axt*_*avt 8

Hibernate文档说:

  • 在批量HQL查询中不能指定隐式或显式的连接.子查询可以在where子句中使用,子子查询本身可以包含连接.

因此,您需要使用等效的子查询替换隐式连接:

getHibernateTemplate().bulkUpdate(
   "update Address address set address.preferred = 1 " +
   "where address.user in (select u from User u where u.language = ?)",
   "en"); 
Run Code Online (Sandbox Code Playgroud)