2010-09-07 76 views
1

是否可以限制使用Hibernate/HQL更新的行數?例如:休眠,HSQL和更新(限制)

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在內存DBS,以及在部署使用MySQL的一些單元測試。 MySql支持Update語句上的Limit子句,但HSQL不支持,並且在HSQL中使用內部選擇進行UPDATE需要按順序排列,這似乎是一個糟糕的主意。有沒有一種方法可以實現限制更新中的行數?

謝謝。

回答

2

嘗試HSQLDB 2.0(最新快照罐子,而不是GA)與Hibernate 3.5.5

它確實需要一個內部的選擇與LIMIT末但這不再需要ORDER BY。此外,如果ORDER BY與用於SELECT的索引相同,則可以使用索引。

一個例子是這樣的:

UPDATE MyObj o SET o.prop = :prop WHERE o.id IN (SELECT id FROM MyObj LIMIT 10)