Java Spring3.1,Hibernate4,SessionFactory
这是有效的:Java Spring3.1,Hibernate4,SessionFactory,java,hibernate,spring,Java,Hibernate,Spring,这是有效的: ... 但升级到上述版本会破坏它。使用Spring3.1.Release和Hibernate4.0.0.FINAL创建bean的正确方法是什么 部署时的错误是: 嵌套异常为java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider 编辑 添加了我自己的答案,这为我解决了问题。Hibernate 4删除了弃用的CacheProvider相关接口和类,而支持先前发布的RegionFactory相关缓存接口。
...
但升级到上述版本会破坏它。使用Spring3.1.Release和Hibernate4.0.0.FINAL创建bean的正确方法是什么
部署时的错误是:
嵌套异常为java.lang.NoClassDefFoundError:
Lorg/hibernate/cache/CacheProvider
编辑
添加了我自己的答案,这为我解决了问题。Hibernate 4删除了弃用的
CacheProvider
相关接口和类,而支持先前发布的RegionFactory
相关缓存接口。您可以找到版本4缓存包摘要、版本3.2缓存包摘要(就在添加RegionFactory
接口之前)和版本3.3缓存包摘要(当RegionFactory
首次发布时)
除了JavaDoc之外,您可能会发现以下文档非常有用:
完全依赖项
部分中,JBoss Hibernate对象关系映射器
的版本为3.3.2.GA
)。如果要升级到Hibernate 4,则需要更新缓存设置。否则,请尝试使用Hibernate 3.3.2或更高的3.X版本
更新:请记住,Spring3.1中的Hibernate4文档目前很少。Spring框架参考文档仅包含以下内容:
Spring3.1引入了,它扩展了Hibernate的
如果您想使用Hibernate4,似乎应该留意一些
更新2:刚刚注意到这个问题与。我认为您应该使用org.springframework.orm.hibernate4.LocalSessionFactoryBean
而不是
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
从LocalSessionFactoryBean
javadoc:
注意:LocalSessionFactoryBean的这个变体需要Hibernate4.0或更高版本。它的角色类似于orm.hibernate3包中的同一命名类。然而,在实践中,它更接近AnnotationSessionFactoryBean,因为它的核心目的是从注释扫描引导SessionFactory
我不得不改变一些事情,现在我们开始:
在我的事务管理器设置中更改了3->4:
org.springframework.orm.hibernate4.HibernateTransactionManager;
以及我的sessionFactory(感谢@toxin):
Spring3.1和Hibernate4在很多方面都不兼容。请参阅下面的Spring JIRA使用此配置
休眠配置文件:
<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
cglib
${cglib版本}
运行时
org.hibernate
休眠实体管理器
${org.hibernate版本}
org.springframework
春季甲虫
${org.springframework版本}
我忘了包括版本,我使用的是hibernate版本:4.1.2.Final和spring版本:3.1.1.RELEASE,hibernate 4.1.3.Final有一个更新,未经测试,但我相信它可以正常工作。
- 对于Hibernate4.0或更高版本,从Spring4.0开始,您应该使用
org.springframework.orm.hibernate4.LocalSessionFactoryBean
例如:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
...
</bean>
(请参阅)实际上,它已被弃用。因此,删除是相当可疑的报告是关于,Spring3.x和Hibernate4是不兼容的。无法使用HibernateTemplate。这是因为hibernate4不再支持HibernateTemplate。我也这样做了,得到了org.springframework.beans.NotWritablePropertyException:bean类的无效属性“exposeTransactionAwareSessionFactory”…我看不到orm.hibernate4,只有.hibernate3。您能在这里给出一些见解吗?我已经导入了hibernate 4。。。解决方法:确保同时使用Spring 3.2.4。3.0.5太老了。我刚刚遇到这个例子,我希望这对任何人都有帮助
<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>
<!-- 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>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
...
</bean>