Pergunta

Existe uma maneira simples de persistir alguns dos campos em outra classe e tabela usando hibernato.

Por exemplo, eu tenho um Person classe com name, surname, email, address1, address2, city, country Campos. Eu quero que minhas aulas sejam:

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;
   // ..
}

E eu quero armazenar o endereço em outra tabela. Qual a melhor maneira de alcançar isto?

Editar: Estou usando anotações. Não precisa ser a maneira como descrevi, estou procurando práticas recomendadas.

Editar 2: Qual será o ID do endereço?

Ps. Se houver uma maneira de tornar o endereço imutável (para usar como um objeto de valor) que é ainda melhor, ou talvez não porque eu pensei que tudo da perspectiva errada :)

Foi útil?

Solução 2

Com o Hibernate 3.5 é possível definir geradores estrangeiros (também conhecido como mapeamento JPA), os detalhes são aqui.

É bem direto Person deve implementar Serializable então @Id A anotação é adicionada a person.

@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
   @Id
   @OneToOne
   @JoinColumn(name = "person_id")
   private Person person;
   // ...
}

Há uma alternativa, mas eu realmente gosto do primeiro:

@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
   @Id
   private int personId;

   @MapsId
   @OneToOne
   @JoinColumn(name = "person_id")
   private Person person;
   // ...
}

Outras dicas

  1. mapa Address como uma entidade e adicione uma chave primária (um ID gerado automaticamente)
  2. mapear a relação entre Person e Address Como one-to-one (@OneToOne em cada campo)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top