外键中的 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)

外键 jpa/hibernate 注释不能按预期工作

在 merge() 操作中丢失复合外键(JPA/Hibernate)

Criteria API JPA Hibernate:外键上的不同选择

如何使用主键作为JPA和Hibernate的外键引用?