2013-05-09 32 views
5

使用JPA我有一個關於CascadeTypes的問題。JPA CascadeType優先?

例如:

@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) 

不同的是這樣的:

@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) 

爲什麼? 我需要cascadetype persist來自動插入我的 實體類中的引用對象。我需要合併,因爲我不想在我的 表中有兩個條目。但是當我首先定義堅持,合併不起作用,當我首先定義 合併,堅持不工作。

爲什麼?

+2

的順序並不重要。無論您的提供者是否存在問題,如果它符合JPA標準,或者您正在調用的實體結構存在問題,則持續或合併。你可以發佈你在做什麼? – Chris 2013-05-09 20:23:20

+1

您目前使用的是JPA提供程序? – blitzen12 2013-05-31 08:52:08

回答

1

JPA規範實際上是一個非常可讀的文件,並可以在這裏下載:

https://jcp.org/aboutJava/communityprocess/final/jsr317/index.html

洞內有384頁它涵蓋了cascade屬性ManyToMany註釋:

的級聯元素指定將 傳播到關聯實體的一組級聯操作。可級聯的操作由CascadeType枚舉定義:public enum CascadeType {ALL,PERSIST,MERGE,REMOVE,REFRESH,DETACH};值爲 cascade = ALL相當於cascade = {PERSIST,MERGE,REMOVE,REFRESH, DETACH}。

正如你所看到的,它沒有提到有關訂單。可能發生的情況是,您的應用程序有時使用需要保留的新對象,有時會從數據庫中加載一個需要合併的對象。換句話說,它是一個應用問題。

就我個人而言,我使用了一種DIY方法來合併我的持久性上下文中的實體。一篇好文章的題目讀的是在這裏:

http://blog.xebia.com/2009/03/23/jpa-implementation-patterns-saving-detached-entities/