Spring JDBC抛出java.lang.NoSuchMethodError:org.hibernate.Session.connection()Ljava / sql / Connection;

时间:2015-03-28 13:30:47

标签: java spring hibernate

我的问题与此问题相同 - java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session

使用Spring JDBCTemplate时出现以下异常。

java.lang.NoSuchMethodError: org.hibernate.Session.connection()Ljava/sql/Connection;

上面链接中接受的答案建议将Hibernate降级为Spring支持的版本。

这是我不能接受的,因为我需要最新版本的Hibernate来使用它的新功能(并且还可以从错误修复中获益)。

有没有办法在不降级hibernate的情况下让它工作?

2 个答案:

答案 0 :(得分:1)

我得到了这个,因为我已经从Hibernate4升级到Hibernate 5但仍然在web.xml中引用了4。

当时:

<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>sessionFactoryBeanName</param-name>
        <param-value>sessionFactory</param-value>
    </init-param>
</filter>

更改为:

<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>sessionFactoryBeanName</param-name>
        <param-value>sessionFactory</param-value>
    </init-param>
</filter>

答案 1 :(得分:0)

正在使用的事务管理器是JPA事务管理器。这是我们通过Spring使用JPA的早期遗留下来的。我们不再这样做了,所以我没想到Spring会在Hibernate版本更新上中断。在搜索bean定义时,我发现了对JPA / Hibernate的错误引用并将其删除。应用程序运行正常。

改变了这个:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
    <property name="entityManagerFactory" ref="entityManagerFactory" />  
</bean>

对此:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>