java - example - onetomany joincolumn
Java: mapeo Hibernate @OtoToOne (1)
Su entidad de estado no debe tener propiedades userId
y contentId
de tipo Integer, mapeadas con @Column
. Debe tener propiedades de user
y content
de tipo Usuario y contenido, mapeados con @OneToOne
:
public class User {
@OneToOne(mappedBy = "user")
private Status status;
// ...
}
public class Status {
@OneToOne
@JoinColumn(name = "frn_user_id")
private User user;
// ...
}
Un usuario tiene un estado. Un estado tiene un usuario.
Estoy intentando hacer funcionar las anotaciones de Hibernate @ OneToOne y no tener mucho éxito aquí ...
Digamos que tengo una tabla llamada status
que se ve así:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
Y tengo una entidad para el User
que se ve así:
@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
}
Y uno similar para Content
, y otra entidad para Status
que se ve así:
@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
}
Cuando realizo una lectura en User
, espero que User.getStatus()
devuelva un objeto Status
con id=1
. En cambio, obtengo una AnnotationException: "Propiedad referenciada no a (Uno | Muchos) ToOne: Status.userId en mappedBy User.status"
He recorrido los documentos, tutoriales y ejemplos aquí en SO, pero todo lo que he intentado hasta ahora ha fallado.
También vale la pena señalar: Esto debería admitir una relación de uno a cero o uno, ya que algunos registros de user
y content
no tendrán una referencia en la tabla de status
.
¡Cualquier ayuda sería muy apreciada!