2012-03-17 235 views
4

我有以下映射:JPA:映射爲@ManyToMany @JoinTable的關係的隱式級聯?

@Entity 
@Table(name = "Prequalifications") 
public class Prequalification implements Serializable 
{ 
    ... 

    @ManyToMany 
    @JoinTable(name = "Partnerships", joinColumns = @JoinColumn(name = "prequalification_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "company_id", referencedColumnName = "id")) 
    private Set<Company> companies; 

    ... 
} 

@ManyToMany + @JoinTable映射關係,是不是那種含蓄的關聯(鏈接)實體(這裏Partnerships)的自動持久,刪除等連雖然

默認情況下,關係有一個空的級聯設置

?以上引用來自Mike Keith的「Pro JPA 2」。

上述實體執行

em.merge(prequalification); 

不堅持相關的夥伴關係,而不指定的任何類型的級聯。

我糾正這個隱式級聯要執行嗎?這在我看到的任何地方都沒有提到...

+0

我假設您在某些時候熟悉Hibernate,並且您可以參考Hibernate和Hibernate註釋文檔來了解您的問題。他們有關於關係定義和級聯操作的非常詳細的章節。 – 2012-03-22 04:10:31

回答

13

連接表中的行將作爲擁有實體的一部分(如果雙向沒有mappedBy的一側)插入/刪除。因此,如果您堅持或刪除或更新資格預審,連接錶行也將被插入或刪除。

目標公司對象不會被級聯到。所以remove()它們不會被刪除,如果列表被更新,它們將不會被刪除,除非設置了orphanRemovla。堅持也不應該級聯,但當你提到「分離」對象時會發生什麼,這有點灰色地帶。從技術上講,應該拋出錯誤,因爲對象是新的,並且關係不是級聯持久。它也可能嘗試插入並得到一個約束錯誤。它不應該級聯持久化,儘管您的對象模型在技術上處於無效狀態,所以發生的可能取決於提供者。

+0

這正是我想知道的,謝謝。 – Kawu 2012-03-22 22:16:26