1.3.5. 双向关联

接下来我们将映射双向关联(bi-directional association)- 在Java里让person和event可以从关联的任何一端访问另一端。当然,数据库schema没有改变,我们仍然需要多对多的阶数。一个关系型数据库要比网络编程语言 更加灵活,所以它并不需要任何像导航方向(navigation direction)的东西 - 数据可以用任何可能的方式进行查看和获取。

首先,把一个参与者(person)的集合加入Event类中:

  1. private Set participants = new HashSet();
  2. public Set getParticipants() {
  3. return participants;
  4. }
  5. public void setParticipants(Set participants) {
  6. this.participants = participants;
  7. }

Event.hbm.xml里面也映射这个关联。

  1. <set name="participants" table="PERSON_EVENT" inverse="true">
  2. <key column="EVENT_ID"/>
  3. <many-to-many column="PERSON_ID" class="events.Person"/>
  4. </set>

如你所见,两个映射文件里都有普通的set映射。注意在两个映射文件中,互换了keymany-to-many的字段名。这里最重要的是Event映射文件里增加了set元素的inverse="true"属性。

这意味着在需要的时候,Hibernate能在关联的另一端 - Person类得到两个实体间关联的信息。这将会极大地帮助你理解双向关联是如何在两个实体间被创建的。