Java:Hibernate @OneToOne映射

我试图让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 ,我希望User.getStatus()将返回id=1Status对象。 相反,我得到一个AnnotationException:“引用的属性不是一个(一个|多个)ToOne:Status.userId in mappedBy User.status”

我已经在这里倾听了文档,教程和示例,但到目前为止我尝试过的所有内容都失败了。

另外值得注意的是:这应该支持一对一或零关系,因为一些usercontent记录在status表中没有引用。

任何帮助将不胜感激!

您的Status实体不得具有Integer类型的属性userIdcontentId ,并使用@Column映射。 它必须具有属性userusercontent类型的内容,与@OneToOne映射:

 public class User { @OneToOne(mappedBy = "user") private Status status; // ... } public class Status { @OneToOne @JoinColumn(name = "frn_user_id") private User user; // ... } 

用户具有一种状态。 状态有一个用户。