2011-12-19 18 views
42

Esto estaba trabajando:Primavera 3.1, Hibernate 4, SessionFactory

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
... 

pero la actualización a las versiones mencionadas rompe. ¿Cuál es el método correcto para crear un bean SessionFactory con Spring 3.1. Libere y Hibernate 4.0.0.FINAL?

El error en la implementación es:

nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;


EDITAR
añadido mi propia respuesta, que lo fijó para mí.

+0

en realidad es se desaprobó. Así que eliminar es bastante sospechoso http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/cache/CacheProvider.html –

Respuesta

91

creo que se debe utilizar org.springframework.orm.hibernate4.LocalSessionFactoryBean en lugar de org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

De LocalSessionFactoryBean javadoc:

NOTE: This variant of LocalSessionFactoryBean requires Hibernate 4.0 or higher. It is similar in role to the same-named class in the orm.hibernate3 package. However, in practice, it is closer to AnnotationSessionFactoryBean since its core purpose is to bootstrap a SessionFactory from annotation scanning.

+1

No puedo ver el orm.hibernate4 solo el .hibernate3 ¿podría darme cualquier visión aquí? He importado hibernate 4 ... Resuelto: asegúrese de utilizar Spring 3.2.4 también. 3.0.5 es demasiado viejo. –

+1

Acabo de encontrar este ejemplo, espero que esto pueda ayudar a cualquiera http://www.baeldung.com/hibernate-4-spring –

15

Hibernate 4 ha eliminado las interfaces y clases obsoletas de CacheProvider en favor de la interfaz de caché relacionada lanzada previamente RegionFactory. Puede encontrar el resumen del paquete de memoria caché de la versión 4 here, el resumen del paquete de memoria caché de la versión 3.2 here (justo antes de agregar la interfaz RegionFactory) y el resumen del paquete de la memoria caché de la versión 3.3 (cuando se lanzó por primera vez RegionFactory).

Aparte de la JavaDoc, es posible encontrar la siguiente documentación útil:

Sin embargo, con base en la primavera 3,1 dependencies Primavera 3.1 no requiere Hibernate 4 (bajo la sección Full Dependencies, JBoss Hibernate Object-Relational Mapper está en la versión 3.3.2.GA). Si desea actualizar a Hibernate 4, deberá actualizar su configuración de caché. De lo contrario, intente utilizar la versión 3.X de Hibernate 3.3.2 o superior.

ACTUALIZACIÓN: Tenga en cuenta que la documentación de Hibernate 4 en Spring 3.1 es actualmente escasa. El Spring Framework Reference Documentation sólo tiene la siguiente para Support for Hibernate 4.x:

See Javadoc for classes within the new org.springframework.orm.hibernate4 package 

Primavera 3.1 introduce la LocalSessionFactoryBuilder, que se extiende de hibernación de Configuration.

Parecería que debe mantener un ojo hacia fuera para algunos other changes si desea utilizar Hibernate 4.

ACTUALIZACIÓN 2: Sólo notado esta pregunta es un duplicado cierre de Exception NoClassDefFoundError for CacheProvider.

5

que tenía que cambiar un par de cosas, aquí vamos:

En mi administrador de transacciones configuración modificada 3 -> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager; 

Y mi sessionFactory a esto (gracias @toxin):

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
+0

Hice lo mismo señor y obtuve org.springframework.beans.NotWritablePropertyException: Inválido propiedad 'exposeTransactionAwareSessionFactory' de la clase de bean ... – masT

-3

Primavera 3.1 y Hibernate 4 no son compatibles en muchos sentidos. Por favor, consulte la siguiente primavera JIRA https://jira.springsource.org/browse/SPR-9365

+2

El informe trata de que Spring 3.x e Hibernate 4 no son compatibles. No se puede usar HibernateTemplate. Esto se debe a que HibernateTemplate ya no es compatible con Hibernate 4. – Hemeroc

8

Utilice esta configuración del archivo de configuración

de hibernación:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

POM:

<!-- CGLIB --> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>${cglib-version}</version> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${org.hibernate-version}</version> 
     <!-- will come with Hibernate core --> 
    </dependency> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 

me olvidó incluir las versiones, estoy usando la versión de hibernación : Versión 4.1.2.Final y primavera: 3.1.1.RELEASE, hay una actualización de hibernación 4.1.3.Final, no probado pero creo que funcionará bien.

0
  • En el caso de Hibernate 4.0 o superior, a partir de la primavera 4.0, debe utilizar
org.springframework.orm.hibernate4.LocalSessionFactoryBean 

Por ejemplo:

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    ... 
</bean> 

Ver http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBean.html

  • En el caso de Hibernate 5.0/5.1/5.2, partir de la primavera 4.3, debe utilizar mejor lugar
org.springframework.orm.hibernate5.LocalSessionFactoryBean 

(Ver http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate5/LocalSessionFactoryBean.html)

Cuestiones relacionadas