SoftwareとTagという 2 つのクラスがあるとします。ソフトウェアは多くのタグに関連付けることができ、各タグは多くのソフトウェアに関連付けることができます。したがって、多対多の関係があります。
Hibernate と注釈を使用します。
@Entity
class Software .. {
@ManyToMany
public List<Tag> tags = new LinkedList<Tag>();
...
}
@Entity
class Tag .. {
@ManyToMany(mappedBy = "tags")
List<Software> softwares = new LinkedList<Software>();
...
}
次に、既存のタグをソフトウェアに追加するたびに、このソフトウェアをそのタグに追加する必要があります (適切な多対多構造を維持するため)。このような:
class Software {
...
public void add(Tag tag) {
tags.add(tag);
tag.add(software);
}
...
}
この追加タグがすでに 1000 0000 ソフトウェアに関連付けられている場合、tag.add(sofware)を呼び出した時点で、Tag クラスはそれらすべてのソフトウェアをメモリにダウンロードして、ソフトウェアを 1 つだけ追加します。右?
質問: これを回避するためのベスト プラクティスは何ですか?