Spring 3.1, Hibernate 4, SessionFactory

Cela fonctionnait:

 ... 

mais la mise à niveau vers les versions susmentionnées le casse. Quelle est la bonne méthode pour créer un bean SessionFactory avec Spring 3.1.Release et Hibernate 4.0.0.FINAL ?

L’erreur sur le déploiement est la suivante:

l’exception nestede est java.lang.NoClassDefFoundError: Lorg / hibernate / cache / CacheProvider;

MODIFIER
Ont ajouté ma propre réponse, qui a corrigé pour moi.

Je pense que vous devriez utiliser org.springframework.orm.hibernate4.LocalSessionFactoryBean au lieu de org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

De LocalSessionFactoryBean javadoc:

REMARQUE: Cette variante de LocalSessionFactoryBean nécessite Hibernate 4.0 ou supérieur. Son rôle est similaire à celui de la classe du même nom dans le package orm.hibernate3. Cependant, dans la pratique, il est plus proche d’AnnotationSessionFactoryBean que son objective principal est d’amorcer une SessionFactory à partir de l’parsing d’annotation.

Hibernate 4 a supprimé les interfaces et classes obsolètes CacheProvider en faveur de l’interface de cache RegionFactory précédemment publiée. Vous pouvez trouver le résumé du package de cache de la version 4 ici , le résumé du package de cache de la version 3.2 ici (juste avant l’ RegionFactory interface RegionFactory ) et le résumé du package de cache de la version 3.3 ici (lorsque RegionFactory été publié pour la première fois).

Outre le JavaDoc, vous pouvez trouver la documentation suivante utile:

  • Utilisation de JBoss Cache en tant que cache de second niveau Hibernate – Chapitre 5. Architecture
  • Cache de second niveau Ehcache Hibernate
  • Hibernate 4 – Le cache de second niveau

Cependant, en fonction des dépendances Spring 3.1, Spring 3.1 ne nécessite pas Hibernate 4 (dans la section Full Dependencies , JBoss Hibernate Object-Relational Mapper est à la version 3.3.2.GA ). Si vous souhaitez passer à Hibernate 4, vous devez mettre à jour vos parameters de cache. Sinon, essayez plutôt d’utiliser Hibernate 3.3.2 ou version 3.X à la place.

MISE À JOUR : Gardez à l’esprit que la documentation d’Hibernate 4 dans Spring 3.1 est actuellement rare. La Spring Framework Reference Documentation contient uniquement les informations suivantes pour la prise en charge de Hibernate 4.x :

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

Spring 3.1 introduit LocalSessionFactoryBuilder , qui étend la Configuration d’Hibernate.

Il semblerait que vous devriez garder un œil sur d’ autres changements si vous souhaitez utiliser Hibernate 4.

UPDATE 2 : Je viens de remarquer que cette question est une duplication proche de Exception NoClassDefFoundError pour CacheProvider .

Utiliser cette configuration

fichier de configuration d’hibernation:

      

POM:

    cglib cglib ${cglib-version} runtime    org.hibernate hibernate-entitymanager ${org.hibernate-version}     org.springframework spring-orm ${org.springframework-version}  

J’ai oublié d’inclure les versions, j’utilise la version hibernate: 4.1.2. Version finale et spring: 3.1.1. LIBRE, il y a une mise à jour de la version 4.1.3 d’hibernation. Finale, non testée mais je crois qu’elle fonctionnera correctement.

J’ai dû changer quelques choses, nous y voilà:

Dans mon gestionnaire de transactions, la configuration a été modifiée 3 -> 4:

 org.springframework.orm.hibernate4.HibernateTransactionManager; 

Et ma sessionFactory à ceci (merci @toxin):

  
  • Dans le cas de Hibernate 4.0 ou supérieur, à partir de Spring 4.0, vous devez utiliser
 org.springframework.orm.hibernate4.LocalSessionFactoryBean 

Par exemple:

  ...  

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

  • Dans le cas de Hibernate 5.0 / 5.1 / 5.2, à partir de Spring 4.3, vous devriez plutôt utiliser
 org.springframework.orm.hibernate5.LocalSessionFactoryBean 

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

Spring 3.1 et Hibernate 4 ne sont pas compatibles à bien des égards. Veuillez vous référer au spring suivant JIRA https://jira.springsource.org/browse/SPR-9365