2010-09-07 45 views
1

是否可以限制使用Hibernate/HQL更新的行数?例如:休眠,HSQL和更新(限制)

Query q = em.createQuery("UPDATE MyObj o Set o.prop = :prop"); 
q.setParameter("prop", "foo"); 
q.setMaxResults(myLimit); 

int res = q.executeUpdate(); 
if (res > myLimit) { 
    // This is entering here and I don't want it to! 
} 

我一直在谷歌上搜索周围,这样,我想使用HQL,这样我可以做到使用HSQL DB在内存DBS,以及在部署使用MySQL的一些单元测试。 MySql支持Update语句上的Limit子句,但HSQL不支持,并且在HSQL中使用内部选择进行UPDATE需要按顺序排列,这似乎是一个糟糕的主意。有没有一种方法可以实现限制更新中的行数?

谢谢。

回答

2

尝试HSQLDB 2.0(最新快照罐子,而不是GA)与Hibernate 3.5.5

它确实需要一个内部的选择与LIMIT末但这不再需要ORDER BY。此外,如果ORDER BY与用于SELECT的索引相同,则可以使用索引。

一个例子是这样的:

UPDATE MyObj o SET o.prop = :prop WHERE o.id IN (SELECT id FROM MyObj LIMIT 10)