2011-06-17 20 views
4

私は双方向のOneToOneリレーショナルマッピングを持つ以下の2つのエンティティを持っています。データアクセスはHibernate EntityManager v。 "3.5.1-Final"によって提供されます。JPA/Hibernate OneToOne Null in foreign key

@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); 

、問題は、詳細テーブルでFK "USER_IDは" ヌルなるということではありませんここに何が欠けているか。

答えて

9

あなただけのユーザーエンティティの外部キーを設定details.setUser(user).

user.setDetails(details);を追加する必要があります。 @OneToOneは、返されたデータをどのように解釈するか(およびフェッチする方法 - 結合を使用する方法)だけをhibernateに伝えます。それは、どの外部キーを設定するかをHibernateに指示しません。

+0

それは、thnxでした。 – Ellead

関連する問題