我试图让休眠@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
只是一个数据库设计理念:也许你可以重新考虑你的设计作为用户和内容之间的多对多关系,并且状态描述将在该设计中是一个用户属性? –