NoSuchMethodError: org.hibernate.SessionFactory.openSession

简介:
签: hibernate4.1   spring3.1   常见问题
严重: Servlet.service() for servlet dispatcher threw exception
java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
 at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:322)
 at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:256)
出问题喽....
没有这个方法?
哦...到hibernate4的时候,spring已经不再提供hibernateDaoSupport.getTemplate也不支持了.
就用hibernate4的session就可以了.
我把内容修改为了
直接使用注入的sessionFactory.openSession();来取得session.看看行不行...
 
找到篇好文章,我之前遇到的问题都在这都能找到.其实出现这些问题的关键就是hibernate4和hibernate3出现了session管理的变动.spring也作出相应的变动....
错误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.SessionFactoryUti ls.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>









,如需转载请自行联系原作者

相关文章
|
5月前
|
SQL 缓存 Java
Hibernate - SessionFactory和Session详解
Hibernate - SessionFactory和Session详解
40 0
|
10月前
|
Java 数据库连接 数据库
【MyBatis】sqlSession.getMapper详解
【MyBatis】sqlSession.getMapper详解
102 0
|
Java 数据库连接 数据库
Java 最常见的面试题:在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
Java 最常见的面试题:在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
|
存储 SQL 缓存
JPA 之 Hibernate EntityManager 专题
JPA 之 Hibernate EntityManager 专题
562 0
JPA 之 Hibernate EntityManager 专题
|
Java 数据库连接 API
Spring整合Hibernate JPA
Spring整合Hibernate JPA
80 0
|
XML Java 关系型数据库
Springboot mybatis逆向工程org.springframework.beans.factory.BeanCreationException: Error creating bean错误
声明:这个错误只是作者在学习时候的一种情况,并不一定能够解决所有情况。还望各位审视出错具体环境!谢谢。
262 0
Springboot mybatis逆向工程org.springframework.beans.factory.BeanCreationException: Error creating bean错误
|
SQL Java 数据库连接
MyBatis - SqlSession(下)
MyBatis - SqlSession(下)
135 0
NoUniqueBeanDefinitionException: No qualifying bean of type 'org.apache.ibatis.session.SqlSession...
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.
4777 0
|
Java 数据格式 XML
mybatis报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exception
接口配置: package mybatis.mapper; import java.util.List; public interface TestMapper { public List selectAllInfo(); } mapper.
11135 0
org.hibernate.HibernateException: No CurrentSessio
org.hibernate.HibernateException: No CurrentSessionContext configured! 错误,解决方法: hibernate.
740 0