Java:Hibernate @OneToOne映射

Sha*_*vil 23 java hibernate jpa one-to-one hibernate-annotations

我试图让Hibernate @OneToOne注释工作,而且在这里没有取得多大成功......

假设我有一个名为的表status,如下所示:

+------------------------------------------------+
|                     status                     |
+------------------------------------------------+
| id | frn_user_id | frn_content_id |   status   |
+----+-------------+----------------+------------+
|  1 |     111     |        0       |  "active"  |
+----+-------------+----------------+------------+
|  2 |      0      |       222      | "inactive" |
+----+-------------+----------------+------------+
Run Code Online (Sandbox Code Playgroud)

我有一个实体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
}
Run Code Online (Sandbox Code Playgroud)

和一个类似的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
}
Run Code Online (Sandbox Code Playgroud)

当我执行读取时User,我希望User.getStatus()它将返回一个Status对象id=1.相反,我得到一个AnnotationException:"referenced属性不是(一个|多个)ToOne:Status.userId in mappedBy User.status"

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

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

任何帮助将不胜感激!

JB *_*zet 71

您的Status实体不得具有属性userIdcontentIdInteger类型,映射为@Column.它必须具有的属性usercontent类型的用户和内容,与映射的@OneToOne:

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

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

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