Cela fonctionnait:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
mais la mise à niveau vers les versions susmentionnées l'interrompt. 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:
l'exception imbriquée est Java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;
[~ # ~] modifier [~ # ~]
J'ai ajouté ma propre réponse, qui l'a corrigée 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 portant le même nom dans le package orm.hibernate3. Cependant, en pratique, il est plus proche de AnnotationSessionFactoryBean car son objectif principal est de bootstrap un SessionFactory à partir de l'analyse des annotations.
Hibernate 4 a supprimé les interfaces et classes obsolètes liées à CacheProvider
au profit de l'interface de cache liée à 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'ajout de l'interface RegionFactory
) et la version 3.3 résumé du package de cache ici (quand RegionFactory
a été publié pour la première fois).
Outre JavaDoc, la documentation suivante peut vous être utile:
Cependant, basé sur Spring 3.1 dépendances Spring 3.1 ne nécessite pas Hibernate 4 (sous le Full Dependencies
section, JBoss Hibernate Object-Relational Mapper
est à la version 3.3.2.GA
). Si vous souhaitez mettre à niveau vers Hibernate 4, vous devrez mettre à jour vos paramètres de cache. Sinon, essayez plutôt d'utiliser Hibernate 3.3.2 ou une version 3.X supérieure.
[~ # ~] mise à jour [~ # ~] : Gardez à l'esprit que la documentation d'Hibernate 4 dans Spring 3.1 est actuellement rare. Le Spring Framework Reference Documentation
n'a que les éléments suivants pour Prise en charge d'Hibernate 4.x :
See Javadoc for classes within the new org.springframework.orm.hibernate4 package
Spring 3.1 présente le LocalSessionFactoryBuilder
, qui étend le Configuration
d'Hibernate.
Il semblerait que vous devriez garder un œil sur certains autres changements si vous souhaitez utiliser Hibernate 4.
MISE À JOUR 2 : Je viens de remarquer que cette question est un double proche de Exception NoClassDefFoundError pour CacheProvider .
Utilisez cette configuration
fichier de configuration d'hibernation:
<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>
j'ai oublié d'inclure les versions, j'utilise la version hibernate: 4.1.2.Version finale et printemps: 3.1.1.RELEASE, il y a une mise à jour de l'hibernate 4.1.3.Final, non testé mais je pense que cela fonctionnera bien.
J'ai dû changer deux ou trois choses, c'est parti:
Dans mon gestionnaire de transactions, la configuration a changé 3 -> 4:
org.springframework.orm.hibernate4.HibernateTransactionManager;
Et ma sessionFactory à cela (merci @toxin):
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
org.springframework.orm.hibernate4.LocalSessionFactoryBean
Par exemple:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
...
</bean>
org.springframework.orm.hibernate5.LocalSessionFactoryBean