我試圖讓休眠@OneToOne註釋工作,並沒有在這裏很成功......的Java:Hibernate的@OneToOne映射
比方說,我有一個表叫status
,看起來像這樣:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
而且我已經得到了User
,看起來像這樣的實體:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
private Integer id;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "userId")
private Status status;
// getters and setters
}
,用一個類似的Content
,和爲Status
諾特爾實體,看起來像這樣:
@Entity
@Table(name = "status")
public class Status {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "frn_user_id")
private Integer userId;
@Column(name = "frn_content_id")
private Integer contentId;
@Column(name = "status")
private String status;
// getters and setters
}
當我執行上User
讀,我希望User.getStatus()
將返回Status
物體id=1
。相反,我得到一個AnnotationException:「引用屬性不是(One | Many)ToOne:Status.userId在mappedBy User.status」
我已經傾倒了文檔,教程和示例在這裏所以,至今嘗試過的失敗了。
另外值得注意的是:這應該支持一對一或一對一的關係,因爲某些user
和content
記錄在status
表中不會有引用。
任何幫助將不勝感激!
'userId'需要是帶'@ OneToOne' /'@ JoinColumn'的'User'類型。另請注意,您有一個錯字(contentId/userId) – 2014-02-13 18:20:51
另請參閱http://stackoverflow.com/questions/18303522/jpa-hibernate-issue-with-onetoone-mappedby-annotation?rq=1 – 2014-02-13 18:21:53
只是一個數據庫設計理念:也許你可以重新考慮你的設計作爲用戶和內容之間的多對多關係,並且狀態描述將在該設計中是一個用戶屬性? –