entityManager的Merge使用注意

persist用來新增記錄、merge用來更新記錄;merge同時也可以用來新增記錄,但persit不能用來更新記錄。但用merge的時候需要注意以下問題:

  1. merge來新增主體對象:
    1. 最好用merge的返回值賦值給原有的對象,不然像自動生產字段(如id)、post事件對對象的修改將體現不到原有的對象,似乎重新生成了新對象。
    2. 使用postPersist等事件來處理邏輯時,會發現獲取不到關聯的子對象和transient字段,也即去不到非持久化的對象。
  2. merge更新主對象,但如果相關聯的子對象(oneToOneoneToMany)的cascase使用了merge策略的話,且子對象爲新對象或含有新對象,所以也存在上述的b問題。cascase只是讓你少寫代碼而已,所以最好先將新增子對象persist好了之後再對主體進行merge

總結:如果有使用Jpapost事件(persistupdate),最好不管主對象還是子對象新增一定用persit、更新一定用merge就不會出錯,可以封裝一個saveOrUpdate來實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章