1.3.5. 双向关联
接下来我们将映射双向关联(bi-directional association)- 在Java里让person和event可以从关联的任何一端访问另一端。当然,数据库schema没有改变,我们仍然需要多对多的阶数。一个关系型数据库要比网络编程语言 更加灵活,所以它并不需要任何像导航方向(navigation direction)的东西 - 数据可以用任何可能的方式进行查看和获取。
首先,把一个参与者(person)的集合加入Event
类中:
private Set participants = new HashSet();
public Set getParticipants() {
return participants;
}
public void setParticipants(Set participants) {
this.participants = participants;
}
在Event.hbm.xml
里面也映射这个关联。
<set name="participants" table="PERSON_EVENT" inverse="true">
<key column="EVENT_ID"/>
<many-to-many column="PERSON_ID" class="events.Person"/>
</set>
如你所见,两个映射文件里都有普通的set
映射。注意在两个映射文件中,互换了key
和many-to-many
的字段名。这里最重要的是Event
映射文件里增加了set
元素的inverse="true"
属性。
这意味着在需要的时候,Hibernate能在关联的另一端 - Person
类得到两个实体间关联的信息。这将会极大地帮助你理解双向关联是如何在两个实体间被创建的。