【问题标题】:Spring JDBC throws java.lang.NoSuchMethodError: org.hibernate.Session.connection()Ljava/sql/Connection;Spring JDBC 抛出 java.lang.NoSuchMethodError: org.hibernate.Session.connection()Ljava/sql/Connection;
【发布时间】:2015-06-01 18:53:41
【问题描述】:

我的问题和这个一样 - 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 才能使用它的新功能(并且还可以从错误修复中受益)。

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

【问题讨论】:

  • 那么你目前有哪些版本的 Spring 和 Hibernate?
  • Spring 最高版本为 4.1.6;休眠在 4.3.8。
  • @duffymo 你可以走得更远:为什么是 Java? C 或汇编程序不能为您做什么?
  • Spring 3.0.5 和 Hibernate 是 4.3.8。我可以升级 Spring,但还有其他几个可以互操作的项目,它们都使用 Spring 3.0.5。 3.x 到 4.x 的迁移会在许多地方破坏代码并需要更改代码。我现在不想这样做……也许以后我们进行全面检修时。另外,为什么 Spring 还要依赖 Hibernate?我期待 Spring JDBC 仅依赖于 JDBC。
  • 你不能指望一个非常老的 Spring 版本会自动兼容 Hibernate 中最新的不兼容更改。关于您评论的第二部分:异常的完整堆栈跟踪是什么? spring-jdbc 对 Hibernate 没有任何依赖,我怀疑你得到的错误来自 spring-jdbc 代码。

标签: java spring hibernate


【解决方案1】:

使用的事务管理器是 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>

【讨论】:

    【解决方案2】:

    我得到这个是因为我已经从 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>
    

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 2016-03-06
      • 2017-05-22
      • 2023-03-06
      • 1970-01-01
      • 2014-04-23
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多