首先,请记住 Hibernate 不会影响正常的 Java 语义。在单向示例中,我们如何在 Person 和 Event 之间创建链接?您将 Event 实例添加到 Person 实例的事件引用集合中。如果要使此链接双向,则必须在另一端执行相同操作,方法是在 Event 中添加对集合的 Person 引用。这种“在两边设置链接”的过程对于双向链接是绝对必要的。
许多开发人员进行防御性编程并创建链接管理方法以正确设置双方(例如,在 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);
}
在这种情况下,“绝对”这个词是什么意思?:
- 这意味着只要当前逻辑过程完成就建议保持关系一致,但显然会发生持久性?
- 这意味着如果不设置对方(不拥有关系),就不能严格执行持久性?
换句话说,如果我的“添加”方法是:
public void addToEvent(Event event) {
this.getEvents().add(event);
//event.getParticipants().add(this); without this line
}