我正在尝试使Hibernate @OneToOne注释正常工作,并且在这里没有太大的成功…
假设我有一个名为的表格status,看起来像这样:
status
+------------------------------------------------+ | status | +------------------------------------------------+ | id | frn_user_id | frn_content_id | status | +----+-------------+----------------+------------+ | 1 | 111 | 0 | "active" | +----+-------------+----------------+------------+ | 2 | 0 | 222 | "inactive" | +----+-------------+----------------+------------+
我有一个User看起来像这样的实体:
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看起来像这样:
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:mappedBy User.status中的Status.userId”
User.getStatus()
id=1
我在此处介绍了文档,教程和示例,但是到目前为止,我尝试过的所有方法都失败了。
还值得注意的是:这应该支持一对零或一对一的关系,因为某些user和content记录在status表中将没有引用。
user
content
任何帮助将不胜感激!
您的状态实体不能有性能userId和contentId整数类型,映射与@Column。它必须具有类型为“用户和内容”的属性user,content并映射为@OneToOne:
userId
contentId
@Column
@OneToOne
public class User { @OneToOne(mappedBy = "user") private Status status; // ... } public class Status { @OneToOne @JoinColumn(name = "frn_user_id") private User user; // ... }
用户具有一种状态。状态有一个用户。