簡體   English   中英

了解休眠中的多對多映射

[英]Understanding many to many mapping in hibernate

我指的是以下示例: http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/ 員工可以參加很多會議,而很多員工也可以參加會議

讓擁有類為Employee。 Employee內部的多對多映射代碼將是-

@ManyToMany(cascade = {CascadeType.ALL})  
@JoinTable(name="EMPLOYEE_MEETING",   
            joinColumns={@JoinColumn(name="EMPLOYEE_ID")},   
            inverseJoinColumns={@JoinColumn(name="MEETING_ID")})  
private Set<Meeting> meetings = new HashSet<Meeting>();  

我查看了其他幾個示例和文檔,但是我仍然不確定這是如何工作的。 我認為我不完全了解joinColumns和inverseJoinColumns的作用。

joinColumns={@JoinColumn(name="EMPLOYEE_ID")} -此行是否僅告訴休眠狀態,員工的員工ID已加入映射表的員工ID?

inverseJoinColumns={@JoinColumn(name="MEETING_ID")})嗎? 此行是否僅告訴hibernate將Employee ID加入到鏈接表中的Meeting_Id列?

實際的注釋是說Hibernate應該創建一個中間聯接表。 該表的一列應映射到Employee表上名為Employee_ID的列(這是您的joinColumns參數),另一列應映射到您的Meeting表上稱為Meeting_ID的列(即您的inverseJoinColumns參數)。

joinColumns參數應指定擁有實體的PK(在本例中為您的Employee對象),而inverseJoinColumn參數指定非擁有實體的PK。

請注意,您不必總是只將連接列指定為PK,但這是有道理的,因為強制執行了唯一性及其對PK的意義。 您還可以在聯接表中的關系的任一側具有多個聯接列,以形成一個復合鍵。

您似乎對建立關系的方式有所了解,但是我要說這是為了讓來自Google的人們受益。 在雙向關系中,您必須指定關系的哪一方“擁有”該關系。 雖然也可以具有雙向級聯,但是通常只能通過擁有的對象訪問非擁有的對象。 因此,通常您不直接訪問Meeting對象,而是通過Employee對象訪問它。 這在單向關系中變得尤為重要,但在確定要級聯的內容時,可能會在雙向關系中引起一些問題。

例如,如果您決定如果刪除Meeting ,則不希望該刪除級聯到CascadeType表,則需要在Meeting類中更改CascadeType

如果您想讓我進一步解釋,請告訴我。

暫無
暫無

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

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