外键中的JPA/Hibernate OneToOne Null

Ell*_*ead 6 java hibernate jpa

我有以下两个具有双向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;
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

持久性代码:

User user = new User();
Details details = new Details();
user.setDetails(details);

entityManager.persist(user);
Run Code Online (Sandbox Code Playgroud)

然后在两个表中正确插入数据,问题是详细信息表"user_id"中的FK变为空,不确定这里缺少什么.

ili*_*den 11

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

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