具有限制的休眠、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 和更新的主要内容,如果未能解决你的问题,请参考以下文章