Estou com o seguinte problema:
Executo uma query no hibernate e ela me retorna uma lista vazia, porém quando eu coloco a query no Query Analyzere seto os parametros ela me retorna uma linha.
A Query eh a seguint:
String select = " select type";
select += " from PartType type, DocumentPart docPart, Part part";
select += " where type = docPart.partType";
select += " and part = docPart.part";
select += " and docPart.doc.docId in (:pDocIds) ";
select += " and docPart.part.cpfCnpj= :pCpfCnpj ";
select += " group by type.partTypeId, type.partCode, type.part ";
select += " having count(type.partTypeId)= :pNumIds ";
o sql gerado, que esta correto e retorna uma linha eh o seguint:
select parttype3_.iPartTypeID as iPartTyp1_10_, parttype3_.vc50Part as vc2_10_, parttype3_.vc15PartCode as vc3_10_
from tPartType parttype0_, tDocPart documentpa1_, tPartType parttype3_
where documentpa1_.iPartID=part4_.iPartID
and documentpa1_.iPartTypeID=parttype3_.iPartTypeID
and (documentpa1_.iDocID in (? , ?))
and part4_.vc20CpfCnpj=?
group by parttype0_.iPartTypeID , parttype0_.vc15PartCode , parttype0_.vc50Part
having count(parttype0_.iPartTypeID)=?
Vejamos se entendi: se você copia o sql gerado pelo Hibernate e o executa no QueryAnalyzer, uma linha é retornada. Mas esta mesma query executada pelo Hibernate retorna uma lista vazia?
Se é isso, tem certeza que os parâmetros que populam a query no Hibernate são os mesmos que colocou no QueryAnalyzer? Pode verificar isso adicionando:
Filipe, antes de qualquer coisa obrigado pela prontidão de sua resposta.
Eu já tinha postado anteriormente a query gerada pelo hibernate:
[STDOUT] Hibernate: select parttype0_.iPartTypeID as iPartTyp1_10_, parttype0_.vc50Part as vc2_10_, parttype0_.vc15PartCode as vc3_10_ from tPartType parttype0_, tDocPart documentpa1_, tPart part2_, tPart part3_ where documentpa1_.iPartID=part3_.iPartID and parttype0_.iPartTypeID=documentpa1_.iPartTypeID and part2_.iPartID=documentpa1_.iPartID and (documentpa1_.iDocID in (? , ?)) and part3_.vc20CpfCnpj=? group by parttype0_.iPartTypeID , parttype0_.vc15PartCode , parttype0_.vc50Part having count(parttype0_.iPartTypeID)=?
acredito que os valores estejam correntos pois eu executo como debug e verifico os valores de cada uma das variáveis, e são esses os valores que eu seto no Query Analyzer.
Maravilha … funcionou… era o Query.setSerializable() mesmo. Eu esperava que o hibernate chamasse o método toString(), retornando portanto o próprio objeto (String cpfCnpj). :x
Muito Obrigado !!
PS.: Esse método Query.setSerializable(), quando usar ??
Bom, não sei o que é este método faz. Não tem javadoc e não há menção no Hibernate in Action hehe.
Fiquei curioso e fui ver os fontes. Cheguei na classe org.hibernate.type.SerializableType, que o que faz é … serializar e deserializar o objeto passado como argumento hehe
Em suma: o Hibernate estava colocando os bytes do objeto CpfCnpj como parâmetro na query, o que não ajuda, presumo