2014-02-18 76 views
0

我嘗試使用Hibernate創建一對一的映射。而當我實現DAO方法,我收到以下錯誤:未知mappedBy in ...引用屬性未知錯誤

org.hibernate.AnnotationException: Unknown mappedBy in: com.User.userData, referenced property unknown: com.UserData.user 
java.lang.NullPointerException 

爲什麼我得到這個錯誤?

我的代碼是這樣的:

對於用戶實體代碼:

@Entity 
@Table(name = "user") 
public class User implements Serializable { 

    @Id 
    @GeneratedValue 
    @Column(name = "userid") 
    int userID; 

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL) 
    UserData userData; 
    ... 
} 

對於實體的UserData代碼:

@Entity 
@Table(name = "UserData") 
public class UserData { 

    @Id 
    @GeneratedValue(generator = "generator") 
    @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user")) 
    int userID; 

    @OneToOne(fetch = FetchType.LAZY) 
    @PrimaryKeyJoinColumn 
    User user; 
+0

請考慮刪除@PrimaryKeyJoinColumn – Koitoer

回答

0

變化mappedBy=usermappedBy=userID。這應該可以解決你的問題。

雖然奇怪的是,你試圖做一個雙向的,當這似乎只需要一個單向。雙向關係意味着您可以從UserDetails對象內部訪問User對象,反之亦然,但我認爲您只需從User對象內部訪問UserDetails對象,而不是相反。

此外,您不需要指定FetchType.LAZY,這是默認選項。

如果要將此更改爲單向一對一,只需更改您的用戶類:

@OneToOne 
@PrimaryKeyJoinColumn 
private UserData userData 

而忽略你的UserData類中所有引用到用戶。

如果這不能解決您的問題,請告訴我