外键中的 JPA / Hibernate OneToOne Null
Posted
技术标签:
【中文标题】外键中的 JPA / Hibernate OneToOne Null【英文标题】:JPA / Hibernate OneToOne Null in foreign key 【发布时间】:2011-06-17 16:48:48 【问题描述】:我有以下两个具有双向 OneToOne 关系映射的实体,数据访问由 Hibernate EntityManager v.“3.5.1-Final”提供。
@Entity
@Table(name = "details")
public class Details
private Long id;
private User user;
public void setUser(User user)
this.user = user;
@OneToOne
@JoinColumn(name="user_id")
public User getUser()
return user;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Long getId()
return id;
private void setId(Long id)
this.id = id;
还有:
@Entity
@Table(name = "users")
public class User
private Long id;
private Details details;
public void setDetails(Details details)
this.details = details;
@OneToOne(mappedBy="user",cascade=CascadeType.ALL)
public Details getDetails()
return details;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Long getId()
return id;
private void setId(Long id)
this.id = id;
持久化代码:
User user = new User();
Details details = new Details();
user.setDetails(details);
entityManager.persist(user);
然后在两个表中正确插入数据,问题是详细信息表“user_id”中的 FK 为空,不确定这里缺少什么。
【问题讨论】:
【参考方案1】:您需要添加details.setUser(user).
user.setDetails(details);
只在 User 实体中设置外键。 @OneToOne
只告诉 hibernate 如何解释返回的数据(以及如何获取 - 使用连接)。它不会告诉 Hibernate 要设置哪些外键。
【讨论】:
以上是关于外键中的 JPA / Hibernate OneToOne Null的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 Hibernate 的 JPA 注释来描述外键仅在子表中的 @OneToMany 关系
基于外键的增量字段(JPA、Hibernate、Oracle DB)
在 merge() 操作中丢失复合外键(JPA/Hibernate)