Cómo almacenar algunos de los valores de la entidad en otra tabla usando Hibernate?

StackOverflow https://stackoverflow.com/questions/2585537

  •  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:)

¿Fue útil?

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

  1. Mapa Address como una entidad y añadir una clave principal (un id autogenerado)
  2. mapa de la relación entre Person y Address como one-to-one (@OneToOne en cada campo)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top