2011-12-19 3 views
42

Ce travaillait:Spring 3.1, Mise en veille prolongée 4, SessionFactory

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

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

L'erreur sur Deploy est:

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


EDIT
ont ajouté ma propre réponse, qu'il fixe pour moi.

+0

En fait, il y a été dépréciée. Donc, supprimer est assez suspect http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/cache/CacheProvider.html –

Répondre

91

Je pense que vous devriez utiliser org.springframework.orm.hibernate4.LocalSessionFactoryBean au lieu 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

Je ne peux pas voir le orm.hibernate4 seulement le .hibernate3 pourriez-vous donner tout aperçu ici? J'ai importé hibernate 4 ... Résolu: Assurez-vous d'utiliser également Spring 3.2.4. 3.0.5 est trop vieux. –

+1

Je viens de rencontrer cet exemple, j'espère que cela pourrait aider à tout le monde http://www.baeldung.com/hibernate-4-spring –

15

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

Autre que le JavaDoc, vous trouverez peut-être la documentation suivante utile:

Cependant, sur la base du printemps 3.1 dependencies Spring 3.1 ne pas require Hibernate 4 (sous 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 paramètres de cache. Sinon, essayez d'utiliser Hibernate 3.3.2 ou version ultérieure 3.X à la place.

MISE À JOUR: Gardez à l'esprit que la documentation Hibernate 4 de Spring 3.1 est actuellement clairsemée. Le Spring Framework Reference Documentation a seulement ce qui suit pour Support for Hibernate 4.x:

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

Spring 3.1 présente le LocalSessionFactoryBuilder, qui étend Hibernate de Configuration.

Il semblerait que vous devriez garder un œil sur certains other changes si vous souhaitez utiliser Hibernate 4.

MISE À JOUR 2: Il suffit de remarquer cette question est un doublon proche de Exception NoClassDefFoundError for CacheProvider.

5

je devais changer une ou deux choses, on y va:

Dans mon gestionnaire de transactions mis en place changé 3 -> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager; 

Et mon sessionFactory à ce (@toxin merci):

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

J'ai fait le même monsieur et j'ai obtenu org.springframework.beans.NotWritablePropertyException: Invalid propriété 'exposeTransactionAwareSessionFactory' de la classe bean ... – masT

-3

Spring 3.1 et Hibernate 4 ne sont pas compatibles tant de manières. S'il vous plaît se référer au printemps suivant JIRA https://jira.springsource.org/browse/SPR-9365

+2

Le rapport est sur, Spring 3.x et Hibernate 4 ne sont pas compatibles. Impossible d'utiliser HibernateTemplate. Cela est dû au fait que HibernateTemplate n'est plus pris en charge par Hibernate 4. – Hemeroc

8

Utilisez cette configuration

fichier de configuration de mise en veille prolongée:

<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, je suis en utilisant la version de mise en veille prolongée : 4.1.2.Final et version printemps: 3.1.1.RELEASE, il y a une mise à jour d'hibernate 4.1.3.Final, non testée mais je crois que ça marchera bien.

0
  • Dans le cas d'Hibernate 4.0 ou plus, au printemps 4.0, vous devez utiliser
org.springframework.orm.hibernate4.LocalSessionFactoryBean 

Par exemple:

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

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

  • Dans le cas d'Hibernate 5.0/5.1/5.2, au printemps 4.3, vous devriez mieux utiliser à la place
org.springframework.orm.hibernate5.LocalSessionFactoryBean 

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

Questions connexes