42 votes

Spring 3.1, Hibernate 4, SessionFactory

Ça marchait :

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

mais la mise à jour vers les versions susmentionnées le casse. Quelle est la méthode correcte pour créer un SessionFactory haricot avec Spring 3.1.Release y Hibernate 4.0.0.FINAL ?

L'erreur sur le déploiement est :

L'exception imbriquée est java.lang.NoClassDefFoundError : Lorg/hibernate/cache/CacheProvider ;

EDIT
J'ai ajouté ma propre réponse, qui a réglé le problème pour moi.

0 votes

En fait, il a été déprécié. Sa suppression est donc assez suspecte docs.jboss.org/hibernate/core/3.3/api/org/hibernate/cache/

92voto

qnox Points 930

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 une version ultérieure. Son rôle est similaire à celui de la classe du même nom du package orm.hibernate3. Cependant, en pratique, elle est plus proche de AnnotationSessionFactoryBean puisque son objectif principal est d'amorcer une SessionFactory à partir de l'analyse des annotations.

1 votes

Je ne vois pas l'orm.hibernate4 mais seulement l'hibernate3. Pouvez-vous m'éclairer ? J'ai importé hibernate 4... Résolu : Assurez-vous d'utiliser Spring 3.2.4 également. La version 3.0.5 est trop ancienne.

1 votes

Je viens de tomber sur cet exemple, j'espère que cela pourra aider quelqu'un. baeldung.com/hibernate-4-printemps

15voto

Dan Cruz Points 7016

Hibernate 4 a supprimé l'option obsolète CacheProvider -en faveur de l'interface et des classes précédemment publiées. RegionFactory -l'interface de cache liée. Vous pouvez trouver le résumé du paquet de cache de la version 4 aquí le résumé du paquet de cache de la version 3.2 aquí (juste avant le RegionFactory a été ajoutée) et le résumé du paquet de cache de la version 3.3 aquí (lorsque RegionFactory a été publié pour la première fois).

Outre la JavaDoc, les documents suivants peuvent vous être utiles :

Cependant, d'après la version de Spring 3.1 Dépendances Spring 3.1 ne nécessite pas Hibernate 4 (sous la rubrique Full Dependencies section, JBoss Hibernate Object-Relational Mapper est à la version 3.3.2.GA ). Si vous souhaitez passer à Hibernate 4, vous devrez mettre à jour vos paramètres de cache. Sinon, essayez plutôt d'utiliser Hibernate 3.3.2 ou une version supérieure de 3.X.

UPDATE : Gardez à l'esprit que la documentation sur Hibernate 4 dans Spring 3.1 est actuellement clairsemée. Le site Spring Framework Reference Documentation ne dispose que des é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 introduit le LocalSessionFactoryBuilder qui étend la fonction Configuration .

Il semblerait que vous devriez garder un œil sur certains autres changements si vous voulez utiliser Hibernate 4.

MISE À JOUR 2 : Je viens de remarquer que cette question est une réplique proche de Exception NoClassDefFoundError pour CacheProvider .

8voto

Defrag Points 76

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.Final et spring version : 3.1.1.RELEASE, il existe une mise à jour d'hibernate 4.1.3.Final, non testée mais je pense qu'elle fonctionnera bien.

5voto

NimChimpsky Points 20263

J'ai dû changer quelques trucs, voilà :

Dans ma configuration du gestionnaire de transactions, j'ai changé 3 -> 4 :

org.springframework.orm.hibernate4.HibernateTransactionManager;

Et mon sessionFactory à ceci (merci @toxin) :

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

0 votes

J'ai fait le même monsieur et j'ai obtenu org.springframework.beans.NotWritablePropertyException : Invalid property 'exposeTransactionAwareSessionFactory' of bean class...

-3voto

Augustine Points 1

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

2 votes

Le rapport est à propos, Spring 3.x et Hibernate 4 ne sont pas compatibles. Impossible d'utiliser HibernateTemplate. Ceci est dû au fait que HibernateTemplate n'est plus supporté par Hibernate 4.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X