Hibernate - Como fazer uma query onde tenho um relacionamento muitos-para-muitos?

Bom dia galera do Guj.

Galera, estou com um probleminha simples no Hibernate: tenho duas tabelas com um relacionamento de muitos para muitos. Eu tenho um “Livro” e “Autores”, onde um livro pode ter vários autores e um autor pode ser de vários livros. O meu problema é pra recuperar isso com HQL…

Minhas classes:

[code]public class Item {
private Long idItem;
private String titulo;
private Set autores = new HashSet();
}

public class Autor {
private Long idAutor;
private String descricao;
}[/code]

Meu mapeamento:

[code]<class name=“model.Item” table=“item”>
<id name=“idItem”><generator class=“native”/></id>
<property name=“titulo” not-null=“true”/>

&lt;set name="autores" table="Item_Autores"&gt;
	&lt;key column="idItem"/&gt;
	&lt;many-to-many column="idAutor" class="model.Autor"/&gt;
&lt;/set&gt;

</class>

<class name=“model.Autor” table=“autor”>
<id name=“idAutor”><generator class=“native”/></id>
<property name=“descricao” unique=“true”/>
</class>[/code]

Obrigado desde já.

Vou dar um exemplo considerando que você quer pesquisar os itens certo…

Criteria crit = session.createCriteria(" From Item  item" +
                                                     " Left Join Fetch item.Autor autor " +
                                                     " where autor.descricao like 'teste%' + 
                                                     " and item.titulo like 'teste2%' ")
List&lt;Item&gt; list = crit.list();

Neste exemplo vocês estará selecionando uma lista de item, fazendo join com os autores, com cláusulas para o nome do autor e título do item.

[]'s

Olá Leandro. Obrigado pela força, mas não funcionou, porque “autores” do itens é um Set.

Eu estou tentando de outra forma agora:
http://www.guj.com.br/posts/list/104586.java

Mas também não está dando certo =/

utilize a clausula IN para relacionamento multiplos. ele irá garantir o relacionamento dos autores associados a tal item.

[quote=lucascaton]org.hibernate.MappingException: Unknown entity: From Item item Left Join Fetch item.Autor autor

Eu estou tentando de outra forma agora:
http://www.guj.com.br/posts/list/104586.java

Mas também não está dando certo =/[/quote]
ele não está encontrando a entidade mapeada de acordo com este HQL. verifique novamente, bem como seu relacionamento. ao meu ver deveria funcionar.

Ele não encontra porque não é um objeto Autor e sim um Set de autores.

Como falo isso pra ele?

Obrigado.

Tentei das quatro formas abaixo; nenhuma funcionou :frowning:

Por favor, me dêem uma luz!
Obrigado.

verifica seu mapeamento no arquivo de configuração de sua classe
exemplo:

O meu mapeamento está lá no primeira mensagem desse post.

Vou copiá-la aqui:

[code]<class name=“model.Item” table=“item”>
<id name=“idItem”><generator class=“native”/></id>
<property name=“titulo” not-null=“true”/>

&lt;set name="autores" table="Item_Autores"&gt;
	&lt;key column="idItem"/&gt;
	&lt;many-to-many column="idAutor" class="model.Autor"/&gt;
&lt;/set&gt;

</class>

<class name=“model.Autor” table=“autor”>
<id name=“idAutor”><generator class=“native”/></id>
<property name=“descricao” unique=“true”/>
</class>[/code]

Obrigado pela ajuda.

blz, bom o que você quer recuperar ?
por exemplo se voce quizer trazer todos os livros de um determinado autor por id do autor
tenta:
session.createCriteria(livro.class)
.setFetchMode(“idautor”.FetchMode.EAGER)
.setFetchMode(“iddeuniao”,FetchMode.EAGER)
.add(Expression.eq(“idAutor”, valor)
.list();

blz…