Nim*_*sky 42 java spring hibernate
这是有效的:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
Run Code Online (Sandbox Code Playgroud)
但升级到上述版本打破了它.使用Spring 3.1.Release和Hibernate 4.0.0.FINAL创建SessionFactory bean 的正确方法是什么?
部署错误是:
嵌套异常是java.lang.NoClassDefFoundError:Lorg/hibernate/cache/CacheProvider;
编辑
添加了我自己的答案,为我修复了它.
小智 92
我认为你应该用org.springframework.orm.hibernate4.LocalSessionFactoryBean而不是
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
来自LocalSessionFactoryBeanjavadoc:
注意:LocalSessionFactoryBean的此变体需要Hibernate 4.0或更高版本.它的作用类似于orm.hibernate3包中的同名类.但是,在实践中,它更接近AnnotationSessionFactoryBean,因为它的核心目的是从注释扫描引导SessionFactory.
Dan*_*ruz 15
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
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我忘了包含版本,我使用的是hibernate版本:4.1.2.Final和spring版本:3.1.1.RELEASE,有一个hibernate 4.1.3.Final的更新,未经测试但我相信它会正常工作.
我不得不改变一些事情,我们走了:
在我的事务管理器中设置更改3 - > 4:
org.springframework.orm.hibernate4.HibernateTransactionManager;
Run Code Online (Sandbox Code Playgroud)
我的sessionFactory对此(感谢@toxin):
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77629 次 |
| 最近记录: |