use*_*076 3 hibernate jpa one-to-one many-to-one
根据书籍Pro JPA 2,单向@ManyToOne和@OneToOne之间的主要区别在于@OneToOne:
源实体中只有一个实例可以引用同一个目标实体实例.换句话说,目标实体实例不在源实体实例之间共享.在数据库中,这相当于对源外键列(即源实体表中的外键列)具有唯一性约束.
问题是,当我在实体上创建这样的映射并让Hibernate创建模式时,根本没有创建唯一约束.为什么?因为对我而言,如果必须为映射显式定义唯一约束,则@ManyToOne和@OneToOne之间没有区别.我可以为他们两个做这件事,但没有任何区别.这是正确的行为吗?
如果关联是ManyToOne,则没有理由使用OneToOne,反之亦然.使用适当的注释,这反映了关联的基数的现实.不这样做只会混淆应用程序的开发人员,如果不是Hibernate本身.
源的唯一性是否受限于数据库不会改变Hibernate的任何内容.根据我的经验,Hibernate 确实在OneToOne的情况下创建了唯一的约束,如果没有,那么你应该创建它(我不会使用Hibernate来创建架构,除了一个快速的肮脏的演示应用程序).
但是,当然,如果存在唯一约束,并且您尝试使用相同的目标实体创建两个不同的实体,则由于数据库唯一约束引发的错误而失败.
| 归档时间: |
|
| 查看次数: |
4033 次 |
| 最近记录: |