tutorial example java hibernate spring

java - example - Spring 3.1, Hibernate 4, SessionFactory



spring hibernate tutorial (6)

Creo que deberías usar org.springframework.orm.hibernate4.LocalSessionFactoryBean lugar de org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

De LocalSessionFactoryBean javadoc:

NOTA: Esta variante de LocalSessionFactoryBean requiere Hibernate 4.0 o superior. Es similar en función a la clase del mismo nombre en el paquete orm.hibernate3. Sin embargo, en la práctica, está más cerca de AnnotationSessionFactoryBean ya que su propósito principal es arrancar una SessionFactory desde el análisis de anotaciones.

Esto estaba funcionando:

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

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

El error en la implementación es:

la excepción anidada es java.lang.NoClassDefFoundError: Lorg / hibernate / cache / CacheProvider;


EDITAR
He agregado mi propia respuesta, que me solucionó.


Hibernate 4 ha eliminado las clases y las interfaces relacionadas con CacheProvider desuso a favor de la interfaz de caché relacionada con RegionFactory lanzada anteriormente. here puede encontrar el resumen del paquete de caché de la versión 4, here resumen del paquete de caché de la versión 3.2 (justo antes de RegionFactory interfaz de RegionFactory ) y el resumen del paquete de caché de la versión 3.3 here (cuando se lanzó por primera vez RegionFactory ).

Además de JavaDoc, puede encontrar útil la siguiente documentación:

Sin embargo, en base a las dependencies Spring 3.1 Spring 3.1 no requiere Hibernate 4 (en 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. La Spring Framework Reference Documentation solo tiene lo siguiente para Soporte para Hibernate 4.x :

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

Spring 3.1 introduce LocalSessionFactoryBuilder , que amplía la Configuration de Hibernate.

Parece que deberías estar atento a otros cambios si quieres usar Hibernate 4.

ACTUALIZACIÓN 2 : Acaba de notar que esta pregunta es un duplicado cercano de Exception NoClassDefFoundError para CacheProvider .



Tuve que cambiar un par de cosas, aquí vamos:

En mi administrador de transacciones, la configuración cambió 3 -> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager;

Y mi sessionFactory a esto (gracias @toxin):

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


Usa esta configuración

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>

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


  • En el caso de Hibernate 4.0 o superior, a partir de Spring 4.0, debe usar

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, a partir de Spring 4.3, mejor debería usar

org.springframework.orm.hibernate5.LocalSessionFactoryBean

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