Relacionamento ManyToMany - como fazer join?

0 respostas
F
Boa tarde a todos, Estou tentando fazer um join na relação muitos-para-muitos entre Ator e Papel. Estas são as tabelas (na base original, estão relacionadas):
CREATE TABLE ATORES ( ID integer PRIMARY KEY NOT NULL, NOME varchar, NASCIMENTO date, CADASTRO_ID integer)
CREATE TABLE ATORES_PAPEIS ( ATOR_ID integer, PAPEL_ID integer, INDICE integer PRIMARY KEY NOT NULL )
CREATE TABLE PAPEIS ( ID integer PRIMARY KEY NOT NULL, NOME varchar, DESCRICAO varchar, COMUNIDADE_ID integer )
E estes são as classes (apenas propriedades, para simplificar):
//----------- Classe Ator -------------------------
@Entity
@Table(name = "atores")
public class Ator{
	@Id
	@GeneratedValue
	private int id;
	@OneToOne
	@PrimaryKeyJoinColumn
	private Cadastro cadastro;
	private String nome;
	@Temporal(TemporalType.DATE)
	private Calendar nascimento;
	@ManyToMany
	@JoinTable(
			name = "ATOR_PAPEL", 
			joinColumns = {@JoinColumn(name = "ATOR_ID")}, 
			inverseJoinColumns = {@JoinColumn(name = "PAPEL_ID")}
	)
	private Set<Papel> papeis;
}
//------------------- Classe Papel -------------------
@Entity
@Table(name = "papeis")
public class Papel {
	
	@Id
	@GeneratedValue
	private int id;
	private String nome;
	private String descricao;
	@ManyToOne
	@JoinColumn(name = "comunidade_id")
	private Comunidade comunidade;
	@ManyToMany(mappedBy = "papeis")
	@IndexColumn(name = "indice")
	@OrderBy("nome ASC")
	private Set<Ator> atores;
}
Em outra classe (Aplicacao) estou executando o seguinte join:
...
		List cadastros = newSession.createQuery(
				"from Ator as a inner join fetch a.papeis as p").list();
...
Que traz 0 resultados. Todas as classes estão mapeadas e as tabelas relacionadas. E consigo resultados direto no banco com a consulta abaixo:
select a.nome, p.nome from atores a, papeis p, atores_papeis ap where a.id = ap.ator_id and p.id = ap.papel_id
Que parece funcionar se eu colocar no código, mas acho que o Hibernate se perde ao mapear os campos, pois traz apenas os nomes dos atores, ao invés de atores e papéis:
7 cadastro(s) found:
Fulano; Fulano
Fulano; Fulano
Fulano; Fulano
Beltrano; Beltrano
Beltrano; Beltrano
Beltrano; Beltrano
Beltrano; Beltrano
O que está errado no código acima? Agradeço desde já pela ajuda.
Criado 16 de agosto de 2011
Respostas 0
Participantes 1