Java: Hibernate @OneToOne マッピング 質問する

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.getStatus()が返されるはずです。代わりに、AnnotationException が発生します: 「参照されたプロパティは (One|Many)ToOne ではありません: Status.userId が、mappedBy User.status にあります」Statusid=1

私はSOのドキュメント、チュートリアル、例を徹底的に調べましたが、これまで試したことはすべて失敗しました。

userまた、注目すべき点として、一部のレコードはテーブルcontent内で参照を持たないため、1 対 0 または 1 の関係をサポートする必要がありますstatus

ご協力いただければ幸いです。

ベストアンサー1

Status エンティティには、 にマッピングされた Integer 型のプロパティuserIdと があってはなりません。 にマッピングされた User 型およびContent 型のプロパティと が必要です。contentId@Columnusercontent@OneToOne

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

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

ユーザーには 1 つのステータスがあります。ステータスには 1 人のユーザーがいます。

おすすめ記事