Problema com JPA Criteria

3 respostas
brunorota

Boa tarde Galera

Estou com problemas pra criar um SELECT sem WHERE com Criteria.

O meu código abaixo está com problema, procurei mas nao encontrei nada de errado,
tem algo de errado nesse código?

public List<ENTITY> findAll(){
		
		CriteriaBuilder cb = em.getCriteriaBuilder();
		CriteriaQuery<ENTITY> query = cb.createQuery(getEntityClass());
		Root<ENTITY> from = query.from(getEntityClass());
		CriteriaQuery<ENTITY> select = query.select(from);
		TypedQuery<ENTITY> q = em.createQuery(select);
		
		return q.getResultList();
	}

OBS: O meu método getEntityClass() retorna o .class da classe corrente.

Obrigado

Att.

3 Respostas

O

Vai ai um exemplo de listagem.

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

		CriteriaQuery<T> query = criteriaBuilder.createQuery(objKlass);
		query.select(
				query.from(objKlass)
			);

		return entityManager.createQuery(query).getResultList();

objKlass = NomeClasse.class

brunorota

opa Oliveira

Esta dando erro, porém creio eu que não seja do JPA em si

O meu código para listar eu criei uma NamedQuery que listava todos.

public List&lt;Modulo&gt; findAll(){
		
		return em.createNamedQuery("Modulo.findAll", Modulo.class).getResultList();
	}

E eu chamo esse método no meu ManagedBean

@PostConstruct
	public void init(){
	
		//Carrega a tabela com os dados do banco
		modulos = new ArrayList&lt;Modulo&gt;();
		modulos = moduloBS.findAll();
		
		//Cria um novo objeto pro formulário
		modulo = new Modulo();
	}

Funciona direitinho

Porém quando eu substituo esse método de listagem pelo Genérico abaixo

public List&lt;ENTITY&gt; findAll(){
		
		CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();  
		  
		CriteriaQuery&lt;ENTITY&gt; query = criteriaBuilder.createQuery(getEntityClass());  
		query.select(  
		        query.from(getEntityClass())  
		    );  
		  
		return em.createQuery(query).getResultList(); 
	}

Acontece o seguinte erro

19:46:28,989 ERROR [org.jboss.ejb3.tx2.impl.CMTTxInterceptor] javax.ejb.EJBTransactionRolledbackException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
19:46:29,014 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] Error Rendering View[/pages/cadastroModulo.xhtml]: com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean moduloMB
	at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:225) [:2.0.3-]
	at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:101) [:2.0.3-]
	at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:405) [:2.0.3-]
	(JIoEndpoint.java:951) [:6.0.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: com.sun.faces.spi.InjectionProviderException: unable to process invokePostConstruct.
	at org.jboss.web.jsf.integration.injection.JBossDelegatingInjectionProvider.invokePostConstruct(JBossDelegatingInjectionProvider.java:94) [:1.0.3]
	at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:219) [:2.0.3-]
	... 59 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_26]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_26]
	at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_26]
	at org.jboss.web.tomcat.service.TomcatInjectionContainer.processesLifecycleCallbackMetaData(TomcatInjectionContainer.java:560) [:6.0.0.Final]
	at org.jboss.web.tomcat.service.TomcatInjectionContainer.postConstruct(TomcatInjectionContainer.java:333) [:6.0.0.Final]
	at org.jboss.web.jsf.integration.injection.JBossDelegatingInjectionProvider.invokePostConstruct(JBossDelegatingInjectionProvider.java:90) [:1.0.3]
	... 60 more
Caused by: javax.ejb.EJBTransactionRolledbackException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.handleInCallerTx(CMTTxInterceptor.java:148) [:0.0.1]
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:227) [:0.0.1]
	at org.jboss.ejb3.proxy.javassist.JavassistInvocationHandlerAdapter.invoke(JavassistInvocationHandlerAdapter.java:71) [:1.0.0-alpha-1]
	at br.com.rotatask.businessservice.ModuloBS_$$_javassist_51.findAll(ModuloBS_$$_javassist_51.java)
	at br.com.rotatask.managedbeans.ModuloMB.init(ModuloMB.java:53) [:]
	... 67 more
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
	at br.com.rotatask.dao.DAO.getEntityClass(DAO.java:62) [:]
	at br.com.rotatask.dao.DAO.findAll(DAO.java:44) [:]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_26]
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
	at org.jboss.ejb3.core.context.SessionInvocationContextAdapter.proceed(SessionInvocationContextAdapter.java:95) [:1.7.17]
	at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:223) [:0.0.1]
	... 176 more

19:46:29,065 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/rotataskWEB].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
	at br.com.rotatask.dao.DAO.getEntityClass(DAO.java:62) [:]
	at br.com.rotatask.dao.DAO.findAll(DAO.java:44) [:]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]

Você sabe o porque isso acontece?

Att.

O

Seguinte.

java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at br.com.rotatask.dao.DAO.getEntityClass(DAO.java:62) [:]

Esta dando erro nesse getEntityClass que voce fez ai.

Tira esse getEntityClass e coloca na mao uma classe do seu sistemas.

Voce vai ver que vai funcionar.

Posta esse getEntityClass ai que vermos.

Criado 27 de julho de 2011
Ultima resposta 28 de out. de 2011
Respostas 3
Participantes 2