Cómo almacenar algunos de los valores de la entidad en otra tabla usando Hibernate?
-
24-09-2019 - |
Pregunta
¿hay una forma sencilla de persistir algunos de los campos en otra clase y tabla usando Hibernate.
Por ejemplo, tengo una clase Person
con name
, surname
, email
, address1
, address2
, city
, campos country
. Quiero que mis clases sean:
public class Person
{
private String name;
private String surname;
private String email;
private Address address;
// ..
}
public class Address
{
private Person person; // to whom this belongs
private String address1;
private String address2;
private String city;
private String country;
// ..
}
y quiero almacenar direcciones en otra mesa. ¿Cuál es la mejor manera de lograr esto?
Editar Estoy utilizando anotaciones. No tiene por qué ser la manera que he descrito, Busco a las mejores prácticas.
Editar 2:? ¿Cuál será la identificación de Dirección
PS. Si hay una manera de hacer inmutable Dirección (para su uso como un objeto de valor) que es aún mejor, o tal vez no porque pensé que todo, desde una perspectiva equivocada:)
Solución 2
Con Hibernate 3.5 es posible definir generadores extranjeros (aka. Mapeo JPA), son detalles aquí .
Es bastante sencillo Person
debe aplicar Serializable
continuación, se añade la anotación @Id
a person
.
@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
@Id
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
// ...
}
Hay una alternativa, pero me gusta mucho la primera de ellas:
@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
@Id
private int personId;
@MapsId
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
// ...
}
Otros consejos
- Mapa
Address
como una entidad y añadir una clave principal (un id autogenerado) - mapa de la relación entre
Person
yAddress
comoone-to-one
(@OneToOne
en cada campo)