具有限制的休眠、HSQL 和更新

Posted

技术标签:

【中文标题】具有限制的休眠、HSQL 和更新【英文标题】:Hibernate, HSQL, and Update w/ Limits 【发布时间】:2010-09-07 18:32:44 【问题描述】:

是否可以限制使用 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,以便我可以在内存数据库中使用 HSQL DB 以及在部署中使用 mysql 进行一些单元测试。 MySql 支持 Update 语句上的 Limit 子句,但 HSQL 不支持,并且在 HSQL 中使用内部选择执行 UPDATE 需要 order by,这似乎是个坏主意。有没有办法限制更新中的行数?

谢谢。

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于具有限制的休眠、HSQL 和更新的主要内容,如果未能解决你的问题,请参考以下文章

带有投影和限制的休眠条件查询问题

在内存数据库中嵌入 HSQL 的 Spring DataSource 和 Linux 上的休眠创建-删除排序

mysql的hsql休眠方言

休眠条件中日期的限制

限制 javafx gui 更新

无法使用休眠插入 hsql 数据库