Tomcat JSP JPA mapeamento

4 respostas
D

Olá pessoal,

estou tentando migrar um conjunto de classes utilizando mapeamento JPA para dentro do Tomcat e estou obtendo a seguinte seqüência de erros

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: org.hibernate.hql.ast.QuerySyntaxException: Classe is not mapped [select DISTINCT p from Classe p where p.abreviacao='RO']
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:476)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

javax.persistence.PersistenceException: org.hibernate.hql.ast.QuerySyntaxException: Classe is not mapped [select DISTINCT p from Classe p where p.abreviacao='RO']
	org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:567)
	org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:79)
	org.apache.jsp.consultar_jsp._jspService(consultar_jsp.java:245)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

org.hibernate.hql.ast.QuerySyntaxException: Classe is not mapped [select DISTINCT p from Classe p where p.abreviacao='RO']
	org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
	org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
	org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
	org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:267)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3049)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2938)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:227)
	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:159)
	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:110)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1612)
	org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:76)
	org.apache.jsp.consultar_jsp._jspService(consultar_jsp.java:245)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs.

o código JSP que possuo é o seguinte

<%@page session="true" %>
<%@page import="javax.persistence.EntityManager" %>
<%@page import="javax.persistence.EntityManagerFactory" %>
<%@page import="javax.persistence.Persistence" %>
<%@page import="model.Classe" %>
<%@page import="java.util.List" %>
<!--<%@page import="javax.servlet.http.HttpSession" %>-->
<%!private EntityManager em;%>
<%
  try{
		//HttpSession session = request.getSession(true);
		//if ((em = (EntityManager) session.getAttribute("manager"))==null){
  			EntityManagerFactory emf = Persistence.createEntityManagerFactory("jurisprudenciaPersistenceUnit");
			em = emf.createEntityManager();
			em.getTransaction().begin();
			//session.setAttribute("manager", em);
		//}


		List<Classe> list = em.createQuery(
				"select DISTINCT p from Classe p where p.abreviacao='RO'")
				.getResultList();
		/*for (Classe c : list) {
			out.println(c);
		}*/		
  }finally{
		/*if (em != null)
			em.close();
			*/
  }
%>

Seguinte código equivalente ao código acima, mas usando JUnit na IDE Eclipse, funciona corretamente.

package model;

import static org.junit.Assert.assertEquals;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ClasseTest {

	private EntityManagerFactory emf;
	private EntityManager em;

	@Before
	public void initEmfAndEm() {
		// BasicConfigurator.configure();
		Logger.getLogger("org").setLevel(Level.ERROR);
		
		emf = Persistence
				.createEntityManagerFactory("jurisprudenciaPersistenceUnit");
		em = emf.createEntityManager();

	}

	@After
	public void cleanup() {
		if (em != null)
			em.close();
	}

	@SuppressWarnings("unchecked")
	@Test
	public void findAll() {
		//int numero = 3, ano = 2007, vara = 22;
		em.getTransaction().begin();
		
	//	Processo proc;

		List<Classe> list = em.createQuery(
				"select DISTINCT p from Classe p")
				.getResultList();
		assertEquals(118, list.size());

	}	

}

o meu persistence.xml é este aqui

<?xml version="1.0" encoding="UTF-8"?>
	
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

	<persistence-unit name="jurisprudenciaPersistenceUnit" 
		transaction-type="RESOURCE_LOCAL">
		<class>model.Acordao</class>
		<class>model.Processo</class>
		<class>model.Classe</class>
		<class>model.Juiz</class>
		<class>model.Vara</class>
		<properties>
			<!--<property name="hibernate.archive.autodetection"
				value="class" />-->

			<property name="hibernate.dialect"
				value="org.hibernate.dialect.Oracle10gDialect" />

			<property name="hibernate.connection.driver_class"
				value="oracle.jdbc.OracleDriver" />
			<property name="hibernate.default_schema"
				value="apadmin" />
				 	



			<property name="hibernate.connection.url"
				value="jdbc:oracle:thin:@192.168.0.28:1521:DSV" />
			<property name="hibernate.connection.username"
				value="apadmin" />
			<property name="hibernate.connection.password"
				value="admin" />				
				
			<property name="hibernate.hbm2ddl.auto" value="validate"/>
			
			<property name="hibernate.show_sql" value="false"/>
			<property name="hibernate.format_sql" value="true"/>
			

		</properties>
	</persistence-unit>
</persistence>

Alguém sabe onde pode ser o problema?

4 Respostas

edilson_x

Cara, não manjo de JPA, mas olhando pelo erro, ta faltando mapeamento para ‘p’

ou um alias ‘p’ para alguma classe(não sei se é permitido).

estarei acompanhando o tópico para aprender.

D

Olá Edilson,

Mas a consulta funciona quando realizada usando JUnit. Por que não funciona quando coloco no Tomcat?

D

Encontrei o erro. Esqueci de declarar o class-path dentro do meu jar exportado para WEB-INF/lib e esqueci do nome do package model em “select DISTINCT p from model.Classe p where p.abreviacao=‘RO’”.

R

como vc declara o classpath dentro do seu jar exportado? Estou com mesmo problema…

Criado 15 de outubro de 2007
Ultima resposta 19 de out. de 2009
Respostas 4
Participantes 3