Soy un poco nuevo en Spring e hibernate, así que estoy tratando de implementar una aplicación web simple basada en Spring 3 + hibernate 4 mientras inicio tomcat, tengo esta excepción:
java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
...
Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
Descubrí que esta clase estaba en hibernate-core para hibernate 3 pero no la encontré en hibernate 4.
La parte de mi context.xml para la persistencia:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:oracle:thin:@IP_Address:SID"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="20"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.huawei.vms.user"/>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.Oracle10gDialect</prop>
</props>
</property>
</bean>
Ayúdame a descubrir por qué está intentando cargar CacheProvider porque no tengo ninguna configuración para eso en context.xml y qué jar tengo que agregar en mi proyecto. ¡Gracias!
Respuestas:
Cambie su AnnotationSessionFactoryBean a
org.springframework.orm.hibernate4.LocalSessionFactoryBean
(Hibernate 4) y estará listo para comenzar. El AnnotationSessionFactoryBean fue reemplazado por el LocalSessionFactoryBean, ya que ahora hace el escaneo de rutas de clases.fuente
Esto puede deberse a cambios introducidos en Hibernate 4 que no son compatibles con el soporte de Spring para Hibernate. Este problema habla de agregar un paquete separado para admitir hibernación 4. Necesitará Spring 3.1 para esto. La otra opción es seguir con Hibernate 3 si no necesita ninguna característica específica introducida en 4.
fuente
la actualización de AnnotationSessionFactoryBean a hibernate4 funciona perfectamente. También asegúrese de que su transactionManager también apunte a hibernate4,
fuente
Un problema realmente simple que causará el mismo error es simplemente tener una falta de coincidencia entre la versión de hibernación en el pom (4.algo) y la versión especificada en la configuración de primavera.
fuente