Olá Pessoal…
Estou utilizando o hibernate como framework de persistência de minha aplicação, porém não estou conseguindo realizar uma consulta em uma classe derivada com base em um atributo da classe pai.
A consulta é essa:
FROM A as obj where obj like(FROM B as obj1 where obj1 = obj
and obj1.tipo = 10
and obj1.codigo = 16)
B- Classe pai
A classe derivada…
Essa consulta me retorna a seguinte exceção:
net.sf.hibernate.exception.GenericJDBCException: Could not execute query
Um abraço a todos…
Jeferson…
Olá, jefecomp!
Uma dica boa é você usar NamedQuery no mapeamento de sua classe. Desse modo facilita a manutenção pois o código da sua aplicação não precisa ser compilada novamente caso precise alterar.
Bom, mais isso é só mais uma dica.
Sobre o seu caso, se bem entendi, vc quer consultar as subclasses baseando no seu owner. Por exemplo: busca itensNota pela Nota.numero.
Se é isso, usando a NamedQuery ficaria assim:
<query name="documentosFindByPessoa" ><![CDATA[
select pagamento
from Documento documento
where documento.owner.nome like :nome || "%"
order by documento.id]>
</query>
ou ainda:
<query name="pessoaFindDocumentos" ><![CDATA[
select documento from Pessoa pessoa join
pessoa.documentos documento
where pessoa = :bean]]>
</query>
A chamada para a NamedQuery no DAO ficará assim:
private List pessoaFindDocumentos(final Map params) {
return getHibernateTemplate().executeFind(new
HibernateCallback(){
public Object doInHibernate(Session session) throws
HibernateException, SQLException {
Query query = session.getNamedQuery("pessoaFindDocumentos").
setParameter("bean", params.get("bean"));
return query.list();
}
});
}
Veja se resolve seu problema.
E usando a NamedQuery seu código fica bem enxuto e legível.
Vale.