Ajuda com Criteria

5 respostas
rodpuc

Tenho a classe Pedido, que tem uma ArrayList

A criteria abaixo não está funcionando, dá um nullpointer em uma chamada do hibernate...
DetachedCriteria mainCriteria = DetachedCriteria.forClass(Pedido.class);
//...
DetachedCriteria produtoCriteria = DetachedCriteria.forClass(Produto.class);
produtoCriteria.add(Restrictions.between("dataLiberacao", dataAberturaInicio, dataAberturaFim));

mainCriteria.createAlias("produtos", "produto");
mainCriteria.add(Subqueries.in("produto", produtoCriteria));

Eu não entendo mto de criterias, não sei se estou fazendo certo, mas oq eu queria fazer era buscar todos os produtos dentro de uma faixa de data e achar todos os pedidos que tem esses produtos...
Alguma luz?

5 Respostas

rodpuc

up…
é meio urgente pessoal, se puderem ajudar fico agradecido.

Fernando_H_Gomes

tem q explicar melhor algumas coisas…
dataLiberação é do produto ?

na classe pedido o arrayList esta declarado como produtos ?

cole a exception

rodpuc

Sim

Sim

Stack:

javax.ejb.EJBTransactionRolledbackException: EJB Exception: ; nested exception is: java.lang.NullPointerException

at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:791)

at weblogic.ejb.container.internal.BaseLocalObject.postInvoke1(BaseLocalObject.java:483)

at weblogic.ejb.container.internal.BaseLocalObject.postInvokeTxRetry(BaseLocalObject.java:421)

at br.com.nomedaempresaomitido.util.CriteriaServiceBean_eiq2m8_CriteriaServiceLocalImpl.countTotalResults(CriteriaServiceBean_eiq2m8_CriteriaServiceLocalImpl.java:77)

Sendo que esse nullpointer disparado em countTotalResults acontece na chamada de
mainCriteria.setProjection(Projections.rowCount()).uniqueResult();

O código completo desse método é

public int countTotalResults(DetachedCriteria detachedCriteria) { Criteria mainCriteria = detachedCriteria.getExecutableCriteria(this.getSession(this.entityManager)); Integer count = (Integer) mainCriteria.setProjection(Projections.rowCount()).uniqueResult(); detachedCriteria.setProjection(null).setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return count; }

rodpuc

Encontrei uma stack no log que deve ajudar mais:

java.lang.NullPointerException

at org.hibernate.loader.criteria.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:341)

at org.hibernate.criterion.SubqueryExpression.createAndSetInnerQuery(SubqueryExpression.java:153)

at org.hibernate.criterion.SubqueryExpression.toSqlString(SubqueryExpression.java:69)

at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:357)

at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:102)

at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:82)

at org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:91)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1578)

at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)

at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:328)

at br.com.omitido.util.CriteriaServiceBean.countTotalResults(CriteriaServiceBean.java:37)
rodpuc

Resolvido… segue a solução, quem sabe não ajuda alguém futuramente

DetachedCriteria mainCriteria = DetachedCriteria.forClass(Pedido.class); mainCriteria.createAlias("produtos", "p").add( Restrictions.between("p.dataLiberacao", dataAberturaInicio, dataAberturaFim));

Criado 20 de outubro de 2010
Ultima resposta 21 de out. de 2010
Respostas 5
Participantes 2