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”/>
<set name="autores" table="Item_Autores">
<key column="idItem"/>
<many-to-many column="idAutor" class="model.Autor"/>
</set>
</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<Item> 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
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”/>
<set name="autores" table="Item_Autores">
<key column="idItem"/>
<many-to-many column="idAutor" class="model.Autor"/>
</set>
</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…