JPA 单向 @OneToOne 与 Hibernate 的 @ManyToOne - 没有区别吗?

2023-11-24

据书上说专业JPA 2单向 @ManyToOne 和 @OneToOne 之间的主要区别在于 @OneToOne 中:

只有一个源实体实例可以引用同一个目标实体实例。 换句话说,目标实体实例是 不在源实体实例之间共享。在数据库中,这相当于对数据有唯一性约束 源外键列(即源实体表中的外键列)。

问题是,当我在实体上创建这样的映射并让 Hibernate 创建模式时,根本没有创建唯一的约束。为什么?因此,对我来说,如果我必须为映射显式定义唯一约束,则 @ManyToOne 和 @OneToOne 之间没有区别。我可以为他们两个做这件事,这没有什么区别。这是正确的行为吗?


如果关联是 ManyToOne,则没有理由使用 OneToOne,反之亦然。使用适当的注释,反映关联基数的现实情况。不这样做只会让应用程序的开发人员感到困惑,即使不是 Hibernate 本身。

无论数据库中源的唯一性是否受到限制,对于 Hibernate 来说都不会发生任何改变。根据我的经验,休眠does在 OneToOne 的情况下创建唯一约束,如果没有,那么您应该创建它(无论如何,我不会使用 Hibernate 来创建模式,除了一个快速的肮脏的演示应用程序)。

但是,当然,如果存在唯一约束,并且您尝试使用相同的目标实体创建两个不同的实体,则由于数据库唯一约束引发的错误,该操作将会失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA 单向 @OneToOne 与 Hibernate 的 @ManyToOne - 没有区别吗? 的相关文章

随机推荐