2011-12-19 155 views
42

這是工作:彈簧3.1,休眠4,SessionFactory的

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

,但升級到上述版本打破它。什麼是創建SessionFactory bean的正確方法是什麼?Spring 3.1.Release and Hibernate 4.0.0.FINAL

錯誤的部署是:

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


編輯
曾加了我自己的答案,其中固定對我來說。

+0

實際上它已被否決。所以刪除是相當可疑http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/cache/CacheProvider.html – 2011-12-19 17:46:31

回答

91

我認爲你應該使用org.springframework.orm.hibernate4.LocalSessionFactoryBean代替 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

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

我看不到orm.hibernate4只有.hibernate3你可以給任何洞察這裏?我已經導入休眠4 ... 解決:確保你也使用Spring 3.2.4。 3.0.5太舊了。 – 2013-10-31 09:36:54

+1

我剛剛遇到這個例子,我希望這可能有助於任何人http://www.baeldung.com/hibernate-4-spring – 2014-12-01 15:15:03

15

Hibernate 4已刪除已棄用的CacheProvider相關接口和類,以支持之前發佈的與RegionFactory相關的高速緩存接口。您可以找到版本4高速緩存包摘要here,版本3.2高速緩存包摘要here(就在添加接口RegionFactory之前)和版本3.3高速緩存包摘要here(當RegionFactory第一次發佈時)。

除了JavaDoc中,你會發現下面的文檔有用的:基於Spring 3.1 dependencies春3.1

然而,不需要休眠4(在Full Dependencies部分,JBoss Hibernate Object-Relational Mapper的版本是3.3.2.GA)。如果你想升級到Hibernate 4,你需要更新緩存設置。否則,請嘗試使用Hibernate 3.3.2或更高版本。

UPDATE:請記住,Spring 3.1中的Hibernate 4文檔目前是稀疏的。該Spring Framework Reference Documentation唯一有Support for Hibernate 4.x如下:

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

春3.1引入了LocalSessionFactoryBuilder,它擴展了Hibernate的Configuration

這似乎是你應該留意一些other changes如果你想使用Hibernate 4.

更新2:只注意到這個問題的Exception NoClassDefFoundError for CacheProvider密切的副本。

5

我不得不改變一些事情,在這裏我們去:

在我的事務管理器設置更改3→4:

org.springframework.orm.hibernate4.HibernateTransactionManager; 

而且我SessionFactory來這個(感謝@toxin):

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

我做了同樣的先生,並得到org.springframework.beans.NotWritablePropertyException:無效屬性'exposeTransactionAwareSessionFactory'的bean類... – masT 2013-09-06 11:15:32

-3

春3.1和Hibernate 4並不在很多方面兼容。請參考下面的春季JIRA https://jira.springsource.org/browse/SPR-9365

+2

該報告是關於Spring 3.x和Hibernate 4不兼容的。無法使用HibernateTemplate。 這是因爲Hibernate 4不再支持HibernateTemplate。 – Hemeroc 2012-05-15 10:18:15

8

使用此配置

Hibernate配置文件:

<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> 

我忘了,包括版本,我使用Hibernate的版本:4.1.2.Final和spring版本:3.1.1.RELEASE,有一個更新的hibernate 4.1.3.Final,未經測試,但我相信它會正常工作。

0
  • 在Hibernate 4.0或更高的情況下,作爲春季4.0,你應該使用
org.springframework.orm.hibernate4.LocalSessionFactoryBean 

例如:

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

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

  • 在Hibernate 5.0/5.1/5.2的情況下,例如Spring 4.3的,你最好改用
org.springframework.orm.hibernate5.LocalSessionFactoryBean 

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