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创buildSessionFactory bean的正确方法是什么?
部署错误是:
嵌套的exception是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
相关的caching接口。 您可以在这里find版本4caching包总结, 此处 (仅在添加RegionFactory
接口之前)版本3.2caching包总结以及此处的版本3.3caching包总结(当第一次发布RegionFactory
时)。
除了JavaDoc之外,您可能会发现以下文档很有用:
- 使用JBoss Cache作为Hibernate二级caching – 第5章。体系结构
- Ehcachehibernate二级caching
- hibernate4 – 二级caching
但是,基于Spring 3.1 依赖关系 Spring 3.1不需要Hibernate 4(在Full Dependencies
部分下, JBoss Hibernate Object-Relational Mapper
程序在版本3.3.2.GA
)。 如果你想升级到Hibernate 4,你需要更新caching设置。 否则,请尝试使用Hibernate 3.3.2或更高版本。
更新 :请记住,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 :只是注意到这个问题是CacheProviderexceptionNoClassDefFoundError的重复。
使用这个configuration
hibernateconfiguration文件:
<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,有一个更新的hibernate4.1.3.Final,未经testing,但我相信它会正常工作。
我不得不改变一些东西,我们去了:
在我的事务pipe理器中设置更改了3 – > 4:
org.springframework.orm.hibernate4.HibernateTransactionManager;
和我的sessionFactory这个(谢谢@毒素):
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
- 在Spring 4.0以上的情况下,你应该使用Hibernate 4.0或更高版本
org.springframework.orm.hibernate4.LocalSessionFactoryBean
例如:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> ... </bean>
- 在Hibernate 5.0 / 5.1 / 5.2的情况下,从Spring 4.3开始,你最好改用它
org.springframework.orm.hibernate5.LocalSessionFactoryBean
Spring 3.1和Hibernate 4在很多方面都不兼容。 请参考下面的Spring JIRA https://jira.springsource.org/browse/SPR-9365
- 在hibernate中将枚举映射到string
- Hibernate Criteria使用FetchType.EAGER多次返回子项
- 在Hibernate中persist()vs save()的优点是什么?
- Hibernate 4.1Final替代Hibernate.STRING
- Spring 3.1inheritance的Hibernate 4exception
- 我如何从jackson的一个自定义反序列化器中调用默认的反序列化器
- 枚举在hibernate
- 错误:没有validation器可以findtypes:java.lang.Integer?
- 如何将Spring与Hibernate会话和事务pipe理集成?