[英]Spring 3.1, Hibernate 4, SessionFactory
这是有效的:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
但升级到上述版本打破了它。 使用Spring 3.1.Release和Hibernate 4.0.0.FINAL创建SessionFactory bean的正确方法是什么?
部署错误是:
嵌套异常是java.lang.NoClassDefFoundError:Lorg / hibernate / cache / CacheProvider;
编辑
添加了我自己的答案,为我修复了它。
我认为你应该使用org.springframework.orm.hibernate4.LocalSessionFactoryBean
而不是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
来自LocalSessionFactoryBean
javadoc:
注意:LocalSessionFactoryBean的此变体需要Hibernate 4.0或更高版本。 它的作用类似于orm.hibernate3包中的同名类。 但是,在实践中,它更接近AnnotationSessionFactoryBean,因为它的核心目的是从注释扫描引导SessionFactory。
Hibernate 4删除了已弃用的CacheProvider
相关接口和类,转而使用先前发布的RegionFactory
相关缓存接口。 你可以找到的版本4缓存包摘要这里 ,版本3.2的高速缓存包摘要这里 (在之前RegionFactory
加入接口)和3.3版本的缓存包摘要这里 (当RegionFactory
首次发布)。
除了JavaDoc之外,您可能会发现以下文档非常有用:
但是,基于Spring 3.1 依赖项, Spring 3.1不需要Hibernate 4(在Full Dependencies
部分下, JBoss Hibernate Object-Relational Mapper
的版本为3.3.2.GA
)。 如果要升级到Hibernate 4,则需要更新缓存设置。 否则,请尝试使用Hibernate 3.3.2或更高版本的3.X版本。
更新 :请记住,Spring 3.1中的Hibernate 4文档目前很少。 Spring Framework Reference Documentation
仅支持Hibernate 4.x :
See Javadoc for classes within the new org.springframework.orm.hibernate4 package
Spring 3.1引入了LocalSessionFactoryBuilder
,它扩展了Hibernate的Configuration
。
如果你想使用Hibernate 4,你应该留意一些其他的变化 。
更新2 :刚刚注意到这个问题与CacheProvider的异常NoClassDefFoundError密切相关。
使用此配置
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的更新,未经测试但我相信它会正常工作。
我不得不改变一些事情,我们走了:
在我的事务管理器中设置更改3 - > 4:
org.springframework.orm.hibernate4.HibernateTransactionManager;
我的sessionFactory对此(感谢@toxin):
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
org.springframework.orm.hibernate4.LocalSessionFactoryBean
例如:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
...
</bean>
org.springframework.orm.hibernate5.LocalSessionFactoryBean
Spring 3.1和Hibernate 4在很多方面都不兼容。 请参阅以下Spring JIRA https://jira.springsource.org/browse/SPR-9365
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.