Query.list() ou criteria.list() vazios (há dados nas tabelas)

Após configurar a minha aplicação WEB no Tomcat 6 com Spring e Spring MVC, Hibernate e entidades anotadas, ao efetuar uma listagem o resultado das listagens vem vazio, mas os dados foram inseridos corretamente utilizando as mesmas entidades de maneira direta com o Configuration e o addAnnotatedClass() (um select direto na base traz os dados inseridos).

Todas as injeções das camadas funcionam corretamente e o EntityManager é injetado corretamente utilizando @PersistenceContext.

Imagino que por algum motivo as entidades anotadas não são encontradas, embora de acordo com o manual e a minha experiência não seja necessário declarar as entidades nesse caso (seja no persistence.xml ou outro local).

Dicas são bem-vindas, obrigado. :wink:

O contexto do Spring é carregado corretamente via web.xml, e há configurações no contexto da minha aplicação web, o xml requerido pelo Spring MVC, mas omitirei as configurações não pertinentes ao problema.

Meu hibernateContext.xml:

[code]
<?xml version=“1.0” encoding=“UTF-8”?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd”>

&lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"&gt;
	&lt;property name="ignoreUnresolvablePlaceholders" value="true"/&gt;
	&lt;property name="ignoreResourceNotFound" value="true"/&gt;
	&lt;property name="location" value="/WEB-INF/conf/hibernate.properties" /&gt;
&lt;/bean&gt;

&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;
	&lt;property name="driverClassName" value="${hibernate.driverClassName}" /&gt;
	&lt;property name="url" value="${hibernate.url}" /&gt;
	&lt;property name="username" value="${hibernate.username}" /&gt;
	&lt;property name="password" value="${hibernate.password}" /&gt;
	&lt;property name="initialSize" value="${hibernate.initialSize}"/&gt;
	&lt;property name="maxActive" value="${hibernate.maxActive}"/&gt;
	&lt;property name="maxWait" value="${hibernate.maxWait}"/&gt;
&lt;/bean&gt;

&lt;bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&gt;
	&lt;property name="dataSource" ref="dataSource"/&gt;
	&lt;property name="persistenceXmlLocation" value="META-INF/persistence.xml"/&gt;
	&lt;property name="persistenceUnitName" value="persistence"/&gt;
    &lt;property name="jpaVendorAdapter"&gt;
	    &lt;bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"&gt;
	        &lt;property name="showSql" value="${hibernate.show_sql}"/&gt;
	        &lt;property name="generateDdl" value="${hibernate.generate_ddl}" /&gt;
	        &lt;property name="database" value="${hibernate.database}"/&gt;
	     &lt;/bean&gt;
    &lt;/property&gt;
	&lt;property name="loadTimeWeaver"&gt;
		&lt;bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/&gt;
	&lt;/property&gt;
&lt;/bean&gt;

&lt;bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/&gt;

&lt;bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&gt;
	&lt;property name="entityManagerFactory" ref="entityManagerFactory"/&gt;
	&lt;property name="dataSource" ref="dataSource"/&gt;
&lt;/bean&gt;

&lt;tx:annotation-driven transaction-manager="transactionManager" mode="proxy"/&gt;

&lt;!-- Importante: registrando classes anotadas. --&gt;
&lt;context:component-scan base-package="br.com.metodofacil.modelo.dao" /&gt;

</beans>[/code]
Meu persistence.xml:

&lt;persistence 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" version="1.0"&gt; &lt;persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL"&gt; &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt; &lt;properties&gt; &lt;property name="hibernate.cache.use_query_cache" value="false"/&gt; &lt;property name="hibernate.cache.use_second_level_cache" value="false"/&gt; &lt;/properties&gt; &lt;/persistence-unit&gt; &lt;/persistence&gt;
Meu DAO:

[code]
package br.com.metodofacil.modelo.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.springframework.stereotype.Repository;

import br.com.metodofacil.modelo.dao.base.DAOBase;
import br.com.metodofacil.modelo.entidade.ItemMenu;

@Repository
public class DAOItemMenu extends DAOBase {

@SuppressWarnings("unchecked")
public List&lt;ItemMenu&gt; listaItensMenu() {
	List&lt;ItemMenu&gt; list = null;
	Session session = getSession();
	
	Criteria criteria = session.createCriteria(ItemMenu.class)
			.addOrder(Order.asc("prioridadeRenderizacao"));
	list = (List&lt;ItemMenu&gt;)criteria.list(); // Traz lista vazia
	
	Query query = session.createQuery("from " + ItemMenu.class.getCanonicalName() + " itemMenu order by itemMenu.prioridadeRenderizacao");
	list = query.list(); // Traz lista vazia
	
	return list;
}

}[/code]
O DAOBase:

[code]package br.com.metodofacil.modelo.dao.base;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.Session;
import org.hibernate.ejb.EntityManagerImpl;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public abstract class DAOBase {

@PersistenceContext
protected EntityManager entityManager;

protected Session getSession() {
	Session session = null;
	if(entityManager.getDelegate() instanceof EntityManagerImpl) {
		session = ((EntityManagerImpl)entityManager.getDelegate()).getSession();
	} else {
		session = (Session)entityManager.getDelegate();
	}
	return session;
}

}[/code]

AAAAAND… INDEED!!

Ao tentar persistir uma entidade…

org.hibernate.MappingException: Unknown entity: br.com.metodofacil.modelo.entidade.ItemMenu

Dicas?

Esta classe esta com a anotação @Entity?

Está sim. Eu realmente tive que adicionar as classes anotadas no persistence.xml com ….

Embora eu ache que há algum jeito de configurar o sistema sem isso, talvez pelo fato de não utilizar conexão JNDI no Tomcat (o que implica em ) isso seja necessário.

Enfim… assim funcionou…!