数据库和 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 一对一的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章