Como armazenar alguns dos valores da entidade em outra tabela usando hibernato?
-
24-09-2019 - |
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 :)
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
- mapa
Address
como uma entidade e adicione uma chave primária (um ID gerado automaticamente) - mapear a relação entre
Person
eAddress
Comoone-to-one
(@OneToOne
em cada campo)