[英]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.