gpt4 book ai didi

java - 外键中的 JPA/Hibernate OneToOne Null

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:59 27 4
gpt4 key购买 nike

我有以下两个具有双向 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 变为空,不确定这里缺少什么。

最佳答案

你需要添加details.setUser(user).

user.setDetails(details); 仅在 User 实体中设置外键。 @OneToOne 只告诉 hibernate 如何解释返回的数据(以及如何获取 - 使用连接)。它不会告诉 Hibernate 要设置哪些外键。

关于java - 外键中的 JPA/Hibernate OneToOne Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com