我有两个域实体:Employee
和Team
。你猜猜团队有0 ... * Employee
s。建模它们的正确性是什么?
选项1:
class Team{
List<Employee> members;
}
这可能是最直观的方式,但这意味着当我只需要显示Team infos时,我必须加载很多Employee
s,这是完全浪费的。也许我可以添加一些延迟加载(可能是抛出代理)机制,但这会给我们带来很多复杂性
选项2:
class Team{
List<Long> memberIds;
}
这个选项不会加载太多不必要的Employee
但是从建模的角度来看可能(我不确定)不是一个好的设计
选项3:
class Team{}
class Employee{
Team team;
}
在此选项中,我可以通过Team
的属性查询Employee
的{{1}}。但我认为,从建模的角度来看,我可能(我不确定),Employee
不应该知道它是如何组织的,Employee
也是一个没有{Employee
的实体。 {1}}
答案 0 :(得分:1)
第一个选项很简单&amp;最好的。
class Team{
List<Employee> members;
}
您可以在Hibernate或许多其他JPA实现中设置批量大小,这样当必须获取Employees时,它们一次被取出10个或者某些东西。这需要很少的时间来获取,并且Hibernate在您需要它之前不会获取集合。
“ID集”没有帮助 - 它不提供团队成员的名称,并且在您需要时不会加快加载速度。
一般规则是,在需要之前不要进行优化。
但如果您需要,可以考虑两种选择:
但作为“指示性显示文本”,而不是权威价值,第二种选择会没问题。
答案 1 :(得分:0)
你必须考虑这样一个事实:你的团队成员中不应该在逻辑上彼此相等(或者你想要1000个'Agent Smith'克隆为你的团队而战:-))。 更好地建立这样的关系:
Set<Employee> members;