Saya agak baru di Spring dan hibernate jadi saya mencoba menerapkan beberapa aplikasi web sederhana berdasarkan Spring 3 + hibernate 4 sementara saya memulai tomcat, saya memiliki pengecualian ini:
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)
Saya telah menemukan bahwa kelas ini dalam hibernate-core untuk hibernate 3 tetapi saya tidak menemukannya di hibernate 4.
Bagian dari context.xml saya untuk ketekunan:
<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>
Tolong bantu saya untuk mencari tahu mengapa itu mencoba memuat CacheProvider karena saya tidak memiliki pengaturan untuk itu di context.xml dan jar mana yang harus saya tambahkan dalam proyek saya. Terima kasih!
Jawaban:
Ubah AnnotationSessionFactoryBean Anda menjadi
org.springframework.orm.hibernate4.LocalSessionFactoryBean
(Hibernate 4) dan Anda akan baik-baik saja. AnnotationSessionFactoryBean diganti dengan LocalSessionFactoryBean seperti yang dilakukan pemindaian jalur kelas sekarang.sumber
Ini mungkin karena perubahan yang diperkenalkan dalam Hibernate 4 yang tidak kompatibel dengan dukungan Spring untuk Hibernate. Masalah ini berbicara tentang menambahkan paket terpisah untuk mendukung hibernate 4. Anda memerlukan spring 3.1 untuk ini. Opsi lainnya adalah tetap menggunakan hibernasi 3 jika Anda tidak memerlukan fitur khusus apa pun yang diperkenalkan di 4.
sumber
memperbarui AnnotationSessionFactoryBean ke hibernate4 berfungsi sempurna. Pastikan juga transactionManager Anda juga mengarah ke hibernate4,
sumber
Masalah yang sangat sederhana yang akan menyebabkan kesalahan yang sama adalah adanya ketidaksesuaian antara versi hibernate di pom (4.something) dan versi yang ditentukan dalam konfigurasi pegas.
sumber