これは、公式のHibernate チュートリアルの抜粋です。
まず、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
}