您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么建议避免在外键上进行单向一对多关联?

为什么建议避免在外键上进行单向一对多关联?

外键上的单向一对多关联是一种不常见的情况,因此不建议这样做。

这有两个方面:

线程@CalmStorm 的答案被删除链接地址只有这些东西的第二位,但让我们开始吧。

该线程建议用联接表替换一对多关系,因为否则,一对多方法“用不属于该实体的列填充许多副表,仅用于“链接” porpuses(原文如此) ‘。这种策略可能会在Hibernate层中产生干净的模型,但不幸的是,这会导致数据库损坏。

因为sql只能断言子记录有一个父记录;没有办法强制父母必须有孩子的规则。因此,没有办法坚持要求表在联接表中具有条目,结果是有可能具有孤立的子记录,这正是外键旨在防止的。

我还有其他一些反对意见,但下一个最重要的反对意见是不适当。相交表旨在表示多对多关系。用它们表示一对多的关系会造成混乱,并且我喜欢过多的其他数据库对象。

因此,第二个方面是: 单向 一对多关联。这些问题是Hibernate认情况下处理它们的特殊方式。如果我们在同一事务中插入一个父项和一个子项,则Hibernate插入子项记录,然后插入父项,然后使用父项的键更新子项。这需要可延期的外键约束(yuck!),也可能需要不可延期的非null约束(double yuck)。

有两个解决方法。一种是使用双向的一对多关联。根据文档中的引用,这是最常见的方法。另一种方法是调整子对象的映射,但这有其自身的影响。

其他 2022/1/1 18:15:47 有493人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶