在单向Set-based关联的代码基础上做的双向关联。
首先往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="Person"/>
</set>
inverse="true";inverse倒转,倒向;有点生涩,可以理解为是否放弃维护participants的关联关系。
如何维护双向关联?
在person端设置event集合的引用,在event端设置person集合的引用。
很多开发者也谨慎编写和创建连接管理方法来正确设置双向关联:
protected Set getEvents() {
return events;
}
protected void setEvents(Set events) {
this.events = events;
}
public void addToEvent(Event event) {
this.getEvents().add(event);
event.getParticipants().add(this);
}
public void removeFromEvent(Event event) {
this.getEvents().remove(event);
event.getParticipants().remove(this);
}
get和set的访问修饰符为protected。是的同一个包和子类能够访问这些方法。在Event端也做类似修改。
原则:所有双向关联需要有一方为inverse,在one-to-many关系中应有由多的一方维护关联关系,在many-to-many中可为任意一方。