是否可以限制使用Hibernate / HQL更新的行数?例如:
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,以便我可以在内存dbs中使用HSQL DB进行一些单元测试,以及在部署中使用MySql。 MySql支持Update语句的Limit子句,但是HSQL没有,并且在HSQL中使用内部选择执行UPDATE需要一个order by,这看起来是个坏主意。有没有办法让我实现限制更新中的行数?
感谢。
答案 0 :(得分:2)
使用Hibernate 3.5.5
尝试HSQLDB 2.0(最新的快照jar,而不是GA)它确实需要在结尾处使用LIMIT进行内部选择,但这不再需要ORDER BY。此外,如果索引与用于SELECT的索引相同,则ORDER BY可以使用索引。
一个例子就是:
UPDATE MyObj o SET o.prop = :prop WHERE o.id IN (SELECT id FROM MyObj LIMIT 10)