2011-12-19 153 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