Urgente consulta N-N Hibernat

2 respostas
G

Pessoal,

Eu tenho o objeto Pessoa, que tem uma lista de idiomas, numa relação N-N, conform abaixo:

Pessoa

@ManyToMany 
	@JoinTable(name="tb_pessoa_idioma", 
	   joinColumns=@JoinColumn(name="PES_PID_in_codigo"), 
	   inverseJoinColumns=@JoinColumn(name="IDI_PID_in_codigo"))
	
	private List<Idioma> idiomas;

Idioma

@ManyToMany 
	@JoinTable(name="tb_pessoa_idioma", 
	   joinColumns=@JoinColumn(name="IDI_PID_in_codigo"), 
	   inverseJoinColumns=@JoinColumn(name="PES_PID_in_codigo"))
	
	private List<Pessoa> pessoas;

Quando faço a consulta:

public Pessoa obterPessoa(Pessoa pessoa){
...
			Criteria crit = sessao.createCriteria(Pessoa.class);
			crit.add(Restrictions.eq("codigo", pessoa.getCodigo()));
			
			return (Pessoa) crit.uniqueResult();
...
}

No Bean não retorna o this.pessoa.getIdiomas() preenchido, verifiquei que a consulta habilitando o sql show que tb nao faz a relacao, como eu faria essa consulta usando criteria e preencher o objeto pessoa??

Agradeço a todos que ajudarem desde já.

2 Respostas

rogelgarcia

Tente fazer

A documentação do hibernate recomenda fazer duas ligações, uma Many-To-One e outra One-To-Many e mapear a tabela de ligação em uma classe separada, ao invés de fazer o ManyToMany.

(Já tem um tempo que li isso, não sei como anda a recomendação hoje em dia)

obs: Talvez o resultado não seja um único objeto (pode ser que o hibernate retorne pessoas repetidas)

G

Cara funcionou, vou ler mais sobre o hibernate e muito obrigado pela recomentação de fazer as duas ligações.

Criado 4 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 2
Participantes 2