Ich versuche, Hibernate @OneToOne-Annotationen zum Laufen zu bringen und habe hier nicht viel Erfolg ...
Nehmen wir an, ich habe eine Tabelle mit dem Namen status
, die so aussieht:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
Und ich habe eine Entität für User
, die so aussieht:
@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
}
Und eine ähnliche für Content
und eine andere Entität für Status
, die so aussieht:
@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
}
Beim Lesen von User
erwarte ich, dass User.getStatus()
ein Status
-Objekt mit id=1
Zurückgibt. Stattdessen erhalte ich eine AnnotationException: "Referenzierte Eigenschaft kein (One | Many) ToOne: Status.userId in mappedBy User.status"
Ich habe Dokumente, Tutorials und Beispiele hier auf SO durchgearbeitet, aber alles, was ich bisher versucht habe, ist fehlgeschlagen.
Ebenfalls erwähnenswert: Dies sollte eine Eins-zu-Null-Beziehung oder eine Eins-zu-Null-Beziehung unterstützen, da einige user
- und content
-Datensätze keinen Verweis in der status
-Tabelle enthalten.
Jede Hilfe wäre sehr dankbar!
Ihre Status-Entität darf keine Eigenschaften userId
und contentId
vom Typ Integer haben, die mit @Column
Verknüpft sind. Es muss Eigenschaften user
und content
vom Typ Benutzer und Inhalt haben, zugeordnet mit @OneToOne
:
public class User {
@OneToOne(mappedBy = "user")
private Status status;
// ...
}
public class Status {
@OneToOne
@JoinColumn(name = "frn_user_id")
private User user;
// ...
}
Ein Benutzer hat einen Status. Ein Status hat einen Benutzer.