我指的是示例 - http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/ 员工可以参加许多会议和会议 很多员工都可以参加。
让拥有者成为员工。 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")}
- 这行只告诉hibernate
员工的员工ID加入映射表的员工ID?
inverseJoinColumns={@JoinColumn(name="MEETING_ID")})
?这行只告诉hibernate将Employee id加入链接表中的Meeting_Id列吗?
答案 0 :(得分:2)
实际注释的含义是Hibernate应该创建一个中间连接表。此表的一列应映射到Employee
表Employee_ID
上的列(joinColumns
参数),另一列应映射到您的列上的列名为Meeting
的{{1}}表格(即Meeting_ID
参数)。
inverseJoinColumns
参数应指定拥有实体的PK(在本例中为Employee对象),而joinColumns
指定非拥有实体的PK。
请注意,您不必总是将您的加入列指定为PK,但这是有道理的,因为强制执行唯一性以及它的PK点。您还可以在连接表中的关系的任一侧创建多个连接列。
您似乎已经掌握了如何建立关系,但我会这样说是为了Google从这里来的人们的利益。在双向关系中,您必须指定关系的哪一方拥有&#39;关系。虽然您也可以使用双向级联,但通常只能通过拥有对象来访问非拥有对象。因此,您通常不会直接访问inverseJoinColumn
对象,而是通过Meeting
对象访问它。这在单向关系中变得更加重要,但在确定要级联的内容时,它会在双向关系中引起一些问题。
例如,如果您决定删除Employee
,则不希望删除级联到联接表,则需要更改Meeting
CascadeType
1}} class。
如果您希望我扩展我的解释,请告诉我。