É possivel usar Critéria API com JPA + Hibernate?

7 respostas
R

Hi

Estou usando JPA + Hibernate porem não consigo usar a API Criteria do Hibernate.
Estou usando o seguinte código para tentar recuperar a session porem dá erro de CastException

@PersistenceContext
private EntityManager em;

public List<SmsSend> listByDynamicQuery(SmsSend smsSend){
        Session session = (Session)em.getDelegate();
        Example example = Example.create(new SmsSend());
        Criteria criteria = session.createCriteria(SmsSend.class).add(example);
        return criteria.list();
}

Alguem poderia me ajudar ? desde já obrigado

7 Respostas

P

oi ronildo

estranho…

qual eh a mensagem exata do classcastexception? ele diz que dentro tem um objeto de que tipo?

abracos!

R

Paulo Silveira:
qual eh a mensagem exata do classcastexception? ele diz que dentro tem um objeto de que tipo?
abracos!
EJB5018: An exception was thrown during an ejb invocation on [SmsSendPersistenceImpl] javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: java.lang.ClassCastException: org.hibernate.ejb.EntityManagerImpl cannot be cast to org.hibernate.Session java.lang.ClassCastException: org.hibernate.ejb.EntityManagerImpl cannot be cast to org.hibernate.Session at br.com.jr2tecnologia.model.SmsSendPersistenceImpl.listByDynamicQuery(SmsSendPersistenceImpl.java:54) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

T

o método em.getDelegate() retorna o q? os imports estao de pacotes certos?

R

Creio que estejam certo, segue os import

import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Example;

Quero dizer… se estivesse certo estaria funcionando :? Mas não sei qual seria o correto.

P

opa!

faltou um passo mesmo.

faca o casting para EntityManagerImpl, e depois disso esse cara tem um metodo que chama getSession! Ai sim continua pra pegar o Criteria!

abracos

C

Cara eu nunca tentei fazer isto, mas talvez funcione…

//org.hibernate.impl.SessionImpl Session session = ((SessionImpl)em.getDelegate()).getSessionFactory().getCurrentSession();

J

Veja como fizeram aqui

http://www.guj.com.br/posts/list/76486.java

Criado 16 de setembro de 2009
Ultima resposta 16 de set. de 2009
Respostas 7
Participantes 5