Hibernate最佳实践:避免多对多和"异国情调"的关系

mik*_*esw 7 hibernate jpa

hibernate最佳实践表明,多对多关联是罕见的,应该避免.

不要使用异国情调的关联映射:

实际的多对多关联的实际测试用例很少见.大多数情况下,您需要存储在"链接表"中的其他信息.在这种情况下,使用两个一对多关联到中间链接类要好得多.事实上,大多数协会都是一对多和多对一.因此,在使用任何其他关联样式时应谨慎进行.

一个基本和常见的情况是:用户可以在多个团队中,团队可以有多个成员.

除了为连接表创建实体之外,是否有使用@ManyToMany的替代方法?对于团队/成员,连接表中没有其他数据,因此拥有Team> TeamMembership> User不太实用.

wrs*_*der 7

使用没有任何本质上的错误,@ManyToMany但在实践中,你很少有机会使用它.通常,您需要链接本身的其他属性,此时,关系将成为其自身的实体.

根据我的经验,一个例子就是你所描述的那种人/团队关系.我一开始使用了a @ManyToMany,但是必须把它变成@OneToMany一次我需要在关系上添加一个有效日期(人在特定时间点属于团队).


Lar*_*Chu 5

@ManyToMany的一个问题是模型发生了变化.如果您需要向关联添加字段,那么您有一些选择.您可以重构模型,以便关联成为实体(读取链接类).或者你可以使关联更具异国情调,例如@MapKeyJoinColumn.无论哪种情况,都可以通过首先设计模型来节省未来的重构工作.

此外,使用这些奇异的多对多映射之一往往会使模型更接近测试覆盖率较低且实际使用率较低的边缘情况.这反过来又增加了遇到不支持或不支持的功能以及未解决和未发现的错误的风险.

最后只是因为hibernate为你提供了一种方法,并不意味着你应该使用它.我在开发人员使用hibernate中的某个特性的经历中看到了太多的案例,这种方式并不意味着导致其他设计含义,以及造成更多麻烦和头痛的限制.