簡體   English   中英

當我更改Embedded對象的字段時,EntityManager會自動對數據庫執行UPDATE,但不要調用merge或flush

[英]EntityManager performs UPDATE to database automatically when I change a field of Embedded object, but do not call merge or flush

我有一些bean方法導致不希望的數據庫更新。 我只執行select語句並根據我的需要重新計算某些字段的值,但不希望它自動更新。 如何在不干預默認應用程序設置的情況下控制此過程?

日志文件說明了一些神秘的背景刷新過程:

begin unit of work flush    
Execute query UpdateObjectQuery ...

我可以避免這個更新制作em.setFlushMode(FlushModeType.COMMIT); 在我的方法。 這在我的機器上真的很奇怪這個工作正常 - 在方法執行期間和之后沒有更新。 但是在客戶端機器上我還需要還原事務 - 只有在這種情況下我才會在日志中看到任何更新語句。 但這種治療方法是否正確? 當我在bean方法中更改FlushMode for EM時,其他線程會執行自動提交嗎?

我的機器(GlassFish 2.0,Ubuntu 12.10,eclipcelink 3.2,jdk 1.7.0_15)

客戶機(GlassFish 2.0,Win 7 x86_64,eclipcelink 3.2,jdk 1.7.0_15)

如果您想要對象但不希望保留更改,則需要使用em.detach(實體)將其從EntityManager中分離(如果使用JPA 2.0或em.clear(),如果您希望刪除所有內容)。 回滾事務與清除或關閉EntityManager幾乎相同。 如果將它們合並回EntityManager,則分離的實體將僅保留更改。

如果不使用JTA,您也可以在事務外進行讀取。 如果EM未與事務關聯,則無法刷新更改。 通過這種方式,您可以使用與事務無關的EM,並在完成后丟棄EntityManager。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM