注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Programmer's World

记录成长的点点滴滴

 
 
 

日志

 
 

spring3不支持hibernate4造成不兼容的问题  

2012-10-24 14:52:59|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

错误1:java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider
原因:spring的sessionfactory和transactionmanager与支持hibernate3时不同。
解决:
 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">          <property name="dataSource" ref="dataSource"/>          ...      </bean>              <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">          <property name="sessionFactory" ref="sessionFactory"/>      </bean>  



错误2:java.lang.NoSuchMethodError:
org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session
原因:hibernate4之后,spring31把HibernateDaoSupport去除,包括数据访问都不需要hibernatetemplate,这意味着dao需要改写,直接使用hibernate的session和query接口。
解决:为了改写dao,足足花了一天时间,然后一个个接口进行单元测试,这是蛋疼的一个主要原因。

错误3:nested exception is org.hibernate.HibernateException: No Session found for current thread
原因:发现一些bean无法获得当前session,需要把之前一些方法的事务从NOT_SUPPORT提升到required,readonly=true
见https://jira.springsource.org/browse/SPR-9020
http://www.iteye.com/topic/1120924
解决:
 

<tx:advice id="baseServiceAdvice" transaction-manager="transactionManager">          <tx:attributes>              <tx:method name="get*" read-only="true" propagation="REQUIRED"/><!--之前是NOT_SUPPORT-->              <tx:method name="find*" read-only="true" propagation="REQUIRED"/><!--之前是NOT_SUPPORT-->              <tx:method name="save*" propagation="REQUIRED"/>              <tx:method name="update*" propagation="REQUIRED"/>              <tx:method name="remove*" propagation="REQUIRED"/>              <tx:method name="add*" propagation="REQUIRED"/>              <!--默认其他方法都是REQUIRED-->              <tx:method name="*"/>          </tx:attributes>      </tx:advice>  



错误4:与错误3报错类似,java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibe
rnate/classic/Session;
        at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(S
essionFactoryUtils.java:324) [spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
        at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(Ses
sionFactoryUtils.java:202) [spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

原因:因为opensessioninview filter的问题,如果你的配置还是hibernate3,需要改为hibernate4
 

        <filter>            <filter-name>openSessionInViewFilter</filter-name>            <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>          </filter>  
  评论这张
 
阅读(381)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017