假设我们有两个类:Software和Tag。软件可以关联很多标签,每个标签可以关联很多软件。所以,我们有多对多的关系。
我们使用 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 类会将所有这些软件下载到内存中,以便只添加一个软件。对?
问题:如何避免这种情况的最佳做法是什么?