是否可以限制使用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! }
我一直在使用Google搜索,以便尝试在内存数据库中使用HSQL DB以及在部署中使用MySql进行一些单元测试。MySql在Update语句上支持Limit子句,但HSQL不支持,在HSQL中使用内部选择进行UPDATE需要按顺序排序,这似乎是个坏主意。有没有办法限制更新中的行数?
谢谢。
在Hibernate 3.5.5中尝试HSQLDB 2.0(最新的快照jar,而不是GA)
它确实需要在内部以LIMIT结尾,但不再需要ORDER BY。另外,如果ORDER BY与SELECT使用的索引相同,则可以使用索引。
一个例子是:
UPDATE MyObj o SET o.prop = :prop WHERE o.id IN (SELECT id FROM MyObj LIMIT 10)