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 にあります」Status
id=1
私はSOのドキュメント、チュートリアル、例を徹底的に調べましたが、これまで試したことはすべて失敗しました。
user
また、注目すべき点として、一部のレコードはテーブルcontent
内で参照を持たないため、1 対 0 または 1 の関係をサポートする必要がありますstatus
。
ご協力いただければ幸いです。
ベストアンサー1
Status エンティティには、 にマッピングされた Integer 型のプロパティuserId
と があってはなりません。 にマッピングされた User 型およびContent 型のプロパティと が必要です。contentId
@Column
user
content
@OneToOne
public class User {
@OneToOne(mappedBy = "user")
private Status status;
// ...
}
public class Status {
@OneToOne
@JoinColumn(name = "frn_user_id")
private User user;
// ...
}
ユーザーには 1 つのステータスがあります。ステータスには 1 人のユーザーがいます。