Spring 3.1, Hibernate 4, SessionFactory

2022-09-01 01:46:00

这是有效的:

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

但是升级到上述版本会破坏它。使用Spring 3.1.ReleaseHibernate 4.0.0.FINAL创建SessionFactory Bean的正确方法是什么?

部署时的错误是:

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


编辑
添加了我自己的答案,为我修复了它。


答案 1

我认为你应该使用而不是org.springframework.orm.hibernate4.LocalSessionFactoryBeanorg.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

来自 javadoc:LocalSessionFactoryBean

注意:LocalSessionFactoryBean 的此变体需要 Hibernate 4.0 或更高版本。它的作用类似于 orm.hibernate3 包中的同名类。但是,在实践中,它更接近NotifiedSessionFactoryBean,因为它的核心目的是从注释扫描中引导SessionFactory。


答案 2

Hibernate 4 删除了已弃用的相关接口和类,转而使用以前发布的相关缓存接口。您可以在此处找到版本 4 缓存包摘要,在此处找到版本 3.2 缓存包摘要(就在添加接口之前),在此处找到版本 3.3 缓存包摘要(首次发布时)。CacheProviderRegionFactoryRegionFactoryRegionFactory

除了 JavaDoc 之外,您可能会发现以下文档很有用:

但是,基于Spring 3.1依赖项,Spring 3.1不需要Hibernate 4(在本节下,是版本)。如果要升级到 Hibernate 4,则需要更新缓存设置。否则,请尝试改用 Hibernate 3.3.2 或更高版本的 3.X 版本。Full DependenciesJBoss Hibernate Object-Relational Mapper3.3.2.GA

更新:请记住,Spring 3.1中的Hibernate 4文档目前很少。唯一的以下支持休眠 4.xSpring Framework Reference Documentation

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

Spring 3.1引入了LocalSessionFactoryBuilder,它扩展了Hibernate的配置

如果你想使用Hibernate 4,似乎应该注意其他一些变化

更新2:刚刚注意到这个问题是异常NoClassDefFoundError for CacheProvider的近似副本。


推荐