Hibernate mapping -mapear duas colunas de uma tabela, fazendo referencia a uma coluna de outra

6 respostas
Jeferson_Flamini
Bom dia, alguém tem alguma dica de como gerar um mapeamento que permita o seguinte:
@Entity
class Couple{
   @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
   int id;
   Person husband;
   Person wife; 
}

@Entity
class Person{
   @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
   int id;
   String name;
}
Como devo anotar husband e wife?
@OneToOne
@JoinColumn(name="id", unique=false, nullable=true)
Obrigado

6 Respostas

J
@Entity

class Couple{

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)

int id;

@OneToOne

Person husband;

Person wife;

}

Se não me engano é isso que você quer.

Jeferson_Flamini

Legal jo_user. Era isso que eu pensava, mas como gerar o mapeamento bidirecional também?
Tenho que anotar o id de person apontando para couple de que maneira?

Se utilizo @OneToOne em Person, acicionando uma variavel Couple, na query o hibernate insere um join com uma coluna couple_id que não existe. Devo criar esta coluna?

J

Quando você diz que o objecto “Couple” possui um objeto “Person”, consequentemente, quando você consultar um Couple, terá o objeto Person, basta colocar no objeto de retorno o “.” e terá um objeto Person. Será que é necessário adicionar o relacionamento bilateral?

Jeferson_Flamini

Eu gostaria de ter acesso ao Couple quando consultar um Person também.
O couple.husband e couple.wife esta funcionando, mas não estou conseguindo criar o mapeamento para obter husband.getCouple().wife

Quanndo coloco em Person uma anotação OneToOne para couple, a query que o hibernate loga fazendo uma referencia a uma coluna Person.couple_id que não existe na tabela.

J
public class Person{

@Id

@GeneratedValue

int id;

-Olha eu não sei se poderei ajudar, mas quando coloco GeneratedValue não coloco nenhuma propriedade.

At. Josué

Jeferson_Flamini

Ok, obrigado Josué. Vou estudar um pouco mais o hibernate e ver se faz alguma diferença.
Valeu!

Criado 26 de agosto de 2011
Ultima resposta 27 de ago. de 2011
Respostas 6
Participantes 2