一尘不染

Java:Hibernate @OneToOne映射

hibernate

我正在尝试使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:mappedBy User.status中的Status.userId”

我在此处介绍了文档,教程和示例,但是到目前为止,我尝试过的所有方法都失败了。

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

任何帮助将不胜感激!


阅读 312

收藏
2020-06-20

共1个答案

一尘不染

您的状态实体不能有性能userIdcontentId整数类型,映射与@Column。它必须具有类型为“用户和内容”的属性usercontent并映射为@OneToOne

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

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

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

2020-06-20