2个一对多代替1个多对多。

10
在 Hibernate 教程中,第 25 章最佳实践建议我们使用两个一对多关系,而不是一个多对多关系和一个中间链接类。我看不出这样做的好处:为什么要创建一个三维实体,而多对多可以生成一个充当中间链接的联接表。但是,这个建议肯定有其合理性。
有人能解释一下这个建议的原因吗?谢谢。
1个回答

12

许多对于多对多关系的开发往往出现无法预料的问题 - 它们会产生一些额外的数据,这些数据与关系本身相关,而不是与关系中的任何一个参与方相关。例如,成员和团体可能以多对多的方式相互关联,您想知道成员何时加入团体、他们的成员身份(新成员、待定成员、已暂停等)等信息。

如果您直接将关系建模为多对多,并编写所有代码,则第一个出现在连接表中的额外列将破坏您的模型并且破坏大量代码。


+1(我认为不使用多对多表的性能原因也很重要:当更新联接表时,Hibernate难以实现最佳性能。) - Thierry
@Thierry,当建模多对多关系时,你无法避免“多对多”表(我更喜欢称之为连接表)。我的意思不是你不应该有一个连接表,而是你应该直接在ORM中建模连接表,而不是通过相关对象的集合属性来暗示它。 - Marcelo Cantos
1
是的,我完全同意你的观点,并且我写错了一个单词:我想说的是,多对多可能比两个多对一的效率低(所以我想写“使用”而不是“不使用”,这是完全相反的意思-_-)。因此,即使您知道联接表中不会有任何其他属性,将其映射为实体也可能是一个好主意。 - Thierry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接