2012-09-05 34 views
3

我希望這是適當的部分,我有這個代碼的問題更新setMaxResults

Transaction transaction = session.beginTransaction(); 
Query query = session.createQuery("update database set floop= :ctrl1" +" where ctrl= :ctrl2 ").setMaxResults(2); 
query.setMaxResults(2); 
query.setParameter("ctrl1",3); 
query.setParameter("ctrl2", 5); 

我通過setMaxResults問(2)做更新只對前兩個和他做所有的更新記錄,因爲我做錯了什麼?感謝您的幫助

我想用ession.createSQLQuery,但我不知道該怎麼辦

回答

1

setMaxResults限制了被查詢,而不是受影響的行數返回結果的數量。

當您只想更新有限的一組行時,應該在where條件中指定這些行。設置更新行數量的硬性限制沒有多大意義,因爲無法確定哪些行將被更新。

1

query.setMaxResults(2);將用於selection查詢,將被忽略的insertion/updation。如果您將它用於selection查詢,那麼您將在結果中獲得2條記錄。

0

setMaxResults僅適用於select。對於你的問題,我會執行一個select查詢,然後使用query.setMaxResults(2),這將返回一個最多2個元素的列表。然後循環返回的列表並使用session.update返回一個或兩個元素。

0

我可以看到許多完美有效的用例,你只需要更新有限數量的行,而其他人已經回答了,Hibernate Query無法處理這個問題,所以你需要使用原生SQL。

Transaction transaction = session.beginTransaction(); 
Query query = session.createSQLQuery("UPDATE database SET floop= :ctrl1 WHERE ctrl= :ctrl2 LIMIT :limit "); 
query.setParameter("ctrl1",3); 
query.setParameter("ctrl2", 5); 
query.setParameter("limit", 2); 

請注意,上面的SQL查詢需要使用本地表和列:

你不會在你使用這樣這個答案只適用於MySQL的哪種類型的數據庫的問題指定名稱,而不是你的ORM模型中的名稱。

相關問題