2010-05-21 138 views
9

在Hibernate教程中,第25章的最佳实践表明,我们应该使用2个一对多关系,而不是一对多关系,而使用中间链接类。 我看不出它有什么好处:为什么创建一个3d实体会更好,而多对多可以生成充当此中间链接的连接表。 但是,这个建议必须有一个很好的理由。2一对多而不是1多对多

有人可以解释这个建议的理由吗? 谢谢。

回答

8

多对多的关系经常会发展藤壶—与关系本身相关的额外数据,而不是关系中的任何一个参与者(根据我的经验,这是规范而非例外)。例如,成员和组可能以多对多的方式关联,并且您想知道某个成员加入某个组的时间,他们的成员状态(新建,挂起,暂停,等等)等等。

如果您将关系直接建模为多对多,并相应地编写所有代码,则第一个添加连接表的额外列将打破您的模型和一堆代码。

+0

+1(我认为不使用多对多表也会有性能上的原因:在更新连接表时,hibernate会遇到困难) – Thierry 2010-05-21 14:04:45

+0

@Thierry,你无法避免使用“many多对多“表(我更喜欢称它为连接表)。我所说的不是你不应该有一个连接表,而是你应该直接在ORM中建立连接表的模型,而不是通过相关对象的集合属性来暗示它。 – 2010-05-22 00:14:37

+0

是的,我完全同意你的观点,并且在我写的内容中有一个错字:我想说多对多可能效率低于两对多(所以不用'不用'我想写'使用',这是相反的意思-_-)。所以,即使你知道你在连接表中没有任何其他属性,考虑将它映射为一个实体也是一个好主意。 – Thierry 2010-05-23 09:40:41