2011-03-20 78 views
5

Oracle 10g中,休眠3.4为什么这个休眠模板bulkUpdate不起作用

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

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

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

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

有人知道为什么吗?

回答

8

Hibernate documentation说:

  • 没有加入,无论是隐性或显性的,可以在大批量HQL语句中指定。子查询可以用在where子句中,其中子查询本身可以包含连接。

所以,你需要更换具有同等子查询隐式连接:

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

作品。非常感谢。 – user6778654 2011-03-22 17:08:32