一尘不染

带有限制的休眠,HSQL和更新

hibernate

是否可以限制使用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需要按顺序排序,这似乎是个坏主意。有没有办法限制更新中的行数?

谢谢。


阅读 219

收藏
2020-06-20

共1个答案

一尘不染

在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)
2020-06-20