我的問題是類似JPA最佳實踐問題 - 更新一個字段只
Updating one field in JPA entity
基本上我有其中有一些基本的字段(enum
,String
,DateTime
),它有兩個其他領域的實體美孚。其中之一是OneToOne,另一個是使用集合實現的OneToMany。
我有兩個線程它們在不同的時間運行,並查找使用findById類型的方法在辛格爾頓的EntityManager包裝類相同的實體(我沒有寫這一點;)
我想什麼,以避免是以下情況:
線程1查找一個Foo其中具有1的ID和它得到在該時間點的基準,以與富富的狀態。
線程2查找一個Foo其中具有1的ID,並得到一個裁判的Foo與相同的狀態的線程1
線程1改變上富字符串字段中,並用合併 線程持續,2更改foo上的Enum字段的值並將其保留爲合併結果
上次操作導致更改線程1被替換爲線程2得到的舊字段的狀態,因爲合併正在更新所有內容(除外OneToOne和OneToMany,因爲它們的CascadeType是Persist和Remove)。
我所尋找的是建議,以最佳實踐方法將防止這種狀態重挫當一個人只需要更新以這種方式具體領域的東西。
雖然我有,我認爲是在我的帖子頂部的鏈接中提到的,但它改變了使用現在使用的通用save(Object o)
的東西,它將合併到特定於這種情況下,從實體ID鍵入的特定字段上執行UPDATE。有沒有更好的辦法?我目前的持久性提供者是EclipseLink。
TIA
-NBW
你能發表一些代碼嗎? – 2010-09-11 02:45:55
請參閱[這裏]的答案(http://stackoverflow.com/questions/3476613/updating-one-field-in-jpa-entity/18875850#18875850)查看JPA 2.1支持部分實體更新 – 2013-09-18 15:06:42