2011-12-26 77 views
4

我的本地查詢的結果是(這是工作):差異在我的本機查詢和JPQL(JPA)

Update XXX SET preDeck=deck, deck=deck+1 WHERE ... 

本地查詢的結果是:甲板= 1和preDeck = 0(它是什麼我想)

但JPQL它沒有happend:

UPDATE XXX SET preDeck=deck, deck=deck+1 WHERE ... 

結果是:甲板= 1個predeck = 1太

什麼SOLU重刑?

RGDS

回答

4

有趣的問題。爲您的JPQL查詢生成的SQL是什麼?你使用哪種JPA引擎?

無論如何,解決方案是避免使用JPA時更新查詢,特別是如果要更新的實體數量很少。查詢實體,更新其狀態,並讓JPA爲您刷新更改。

如果必須更新大量實體,則仍然可以使用本機查詢而不是JPQL查詢。或者你可以使用兩個查詢:一個設置preDeck,一個設置deck到preDeck + 1.

+0

eclipselink,JPA 2, – Nav 2011-12-27 11:31:18

+0

如何從jpql查詢中查看生成的sql? – Nav 2011-12-27 11:37:12

+0

請參閱code.google.com/p/log4jdbc和code.google.com/p/log4jdbc-remix – Vadzim 2011-12-27 12:19:22