Je suis un peu nouveau dans Spring et hibernate, donc j'essaie d'implémenter une application Web simple basée sur Spring 3 + hibernate 4 pendant que je démarre tomcat.J'ai cette exception:
java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
...
Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
J'ai trouvé que cette classe était en hibernate-core pour hibernate 3 mais je ne l'ai pas trouvée dans hibernate 4.
La partie de mon context.xml pour la persistance:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:oracle:thin:@IP_Address:SID"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="20"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.huawei.vms.user"/>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.Oracle10gDialect</prop>
</props>
</property>
</bean>
S'il vous plaît, aidez-moi à comprendre pourquoi il essaie de charger CacheProvider car je n'ai pas de paramètres pour cela dans context.xml et quel fichier jar je dois ajouter à mon projet. Merci!
Réponses:
Remplacez votre AnnotationSessionFactoryBean par
org.springframework.orm.hibernate4.LocalSessionFactoryBean
(Hibernate 4) et vous serez prêt à partir. AnnotationSessionFactoryBean a été remplacé par LocalSessionFactoryBean comme il le fait actuellement pour l'analyse du chemin de classe.la source
Cela peut être dû à des changements introduits dans Hibernate 4 qui ne sont pas compatibles avec la prise en charge de Spring pour Hibernate. Ce numéro parle de l'ajout d'un package séparé pour prendre en charge la mise en veille prolongée 4. Vous aurez besoin du printemps 3.1 pour cela. L'autre option est de s'en tenir à la mise en veille prolongée 3 si vous n'avez besoin d'aucune fonctionnalité spécifique introduite dans 4.
la source
la mise à jour de AnnotationSessionFactoryBean vers hibernate4 fonctionne parfaitement. Assurez-vous également que votre transactionManager pointe également vers hibernate4,
la source
Un problème très simple qui causera la même erreur est simplement d'avoir une discordance entre la version hibernate dans le pom (4. quelque chose) et la version spécifiée dans la configuration de printemps.
la source