1.3.5. Bi-directional associations
Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way.
First, add a collection of participants to the Event
Event class:
private Set participants = new HashSet();
public Set getParticipants() {
return participants;
}
public void setParticipants(Set participants) {
this.participants = participants;
}
Now map this side of the association too, in 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>
As you see, these are normal set
mappings in both mapping documents. Notice that the column names in key
and many-to-many
are swapped in both mapping documents. The most important addition here is the inverse="true"
attribute in the set
element of the Event
's collection mapping.
What this means is that Hibernate should take the other side - the Person
class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created .