我试图让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
}
还有一个类似的用于内容
,以及另一个实体用于状态
,看起来像这样:
@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:"Referenced property not a (One|Many)ToOne: Status.userId in mappedBy User.status"
我已经仔细阅读了文档、教程和这里的示例,但迄今为止我尝试的所有方法都失败了。
值得注意的另一点是:这应该支持一对零或一的关系,因为一些user
和content
记录在status
表中没有引用。
任何帮助都将不胜感激!
userId
需要是类型为User
,并带有一个@OneToOne
/@JoinColumn
。另外请注意您有一个拼写错误(contentId/userId)。 - user180100