私は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()
が_id=1
_でStatus
オブジェクトを返すことが予想されます。代わりに、AnnotationException: "Referenced property not not(One | Many)ToOne:Status.userId in mappedBy User.status"を取得します
私はここでドキュメント、チュートリアル、およびサンプルをSOに注ぎましたが、今まで試したすべてが失敗しました。
また、注目に値する:いくつかのuser
およびcontent
レコードはstatus
テーブルに参照を持たないため、これは1対0または1つの関係をサポートする必要があります。
どんな助けも大歓迎です!
Statusエンティティには、@Column
にマッピングされたInteger型のuserId
およびcontentId
プロパティを含めることはできません。タイプがUserおよびContentで、@OneToOne
でマップされたプロパティuser
およびcontent
が必要です。
public class User {
@OneToOne(mappedBy = "user")
private Status status;
// ...
}
public class Status {
@OneToOne
@JoinColumn(name = "frn_user_id")
private User user;
// ...
}
ユーザーには1つのステータスがあります。ステータスには1人のユーザーがいます。