数据库和 Hibernate 一对一的最佳方法

Posted

技术标签:

【中文标题】数据库和 Hibernate 一对一的最佳方法【英文标题】:Database and Hibernate one-to-one best appraoch 【发布时间】:2014-11-11 15:03:37 【问题描述】:

以下哪种是使用 DB 和 Hibernate 实现一对一关系和映射的通用且更好的方法 假设我们有客户和联系人表。 1) 可以将Customer表中的contact_id作为外键保存 2) 可以在Contact表中保留customer_id作为外键 如何实现两者的休眠映射?

我已经使用第二个选项实现了客户和联系表 当我尝试做 hibernatetemplate.save(customer);

我得到以下异常: 无法添加或更新子行:外键约束失败(contact_info, CONSTRAINT contact_info_ibfk_1 FOREIGN KEY (CUSTOMER_ID) REFERENCES customers (ID))

现在的映射是

@Entity
CustomerEntity 
    .....
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name="CUSTOMER_ID")
    private ContactInfoEntity contactDetails;
    .....

@Entity
ContactInfoEntity 

    @Column(name="CUSTOMER_ID")
    private int customerId;

【问题讨论】:

【参考方案1】:

@onetoone 总是难以实现且令人困惑。您可以使用@ManyToOne 并将属性设置为unique=true。在 Hibernate 文档中提到 @manytoone 可以在 @onetoone 上使用,因为它是干净的。

有人在这里发布了类似的问题:

Hibernate - why use many-to-one to represent a one-to-one?

【讨论】:

以上是关于数据库和 Hibernate 一对一的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

hibernate关于一对一注解配置

Hibernate映射( 多对一对一对多多对多)的配置方法

为啥 Hibernate 文档建议将连接表用于一对多关系?

Hibernate--一对一

hibernate学习四(关系映射一对一)

Hibernate的一对一关联关系