J'essaie de faire fonctionner les annotations Hibernate @OneToOne et je n'ai pas beaucoup de succès ici ...
Disons que j'ai une table appelée status
qui ressemble à ceci:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
Et j'ai une entité pour User
qui ressemble à ceci:
@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
}
Et une similaire pour Content
, et une autre entité pour Status
qui ressemble à ceci:
@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
}
Lorsque j'effectue une lecture sur User
, je m'attends à ce que User.getStatus()
renvoie un objet Status
avec id=1
. Au lieu de cela, j'obtiens une AnnotationException: "La propriété référencée n'est pas un (un | plusieurs) ToOne: Status.userId dans mappedBy User.status"
J'ai parcouru des documents, des tutoriels et des exemples ici sur SO, mais tout ce que j'ai essayé jusqu'à présent a échoué.
À noter également: cela devrait prendre en charge une relation un à zéro ou un, car certains enregistrements user
et content
n'auront pas de référence dans la table status
.
Toute aide serait grandement appréciée!
Votre entité Status ne doit pas avoir les propriétés userId
et contentId
de type Integer, mappées avec @Column
. Il doit avoir les propriétés user
et content
de type Utilisateur et Contenu, mappées avec @OneToOne
:
public class User {
@OneToOne(mappedBy = "user")
private Status status;
// ...
}
public class Status {
@OneToOne
@JoinColumn(name = "frn_user_id")
private User user;
// ...
}
Un utilisateur a un statut. Un statut a un utilisateur.