zoukankan      html  css  js  c++  java
  • 关于错误:Cannot unwrap to requested type [javax.sql.DataSource]的解决办法

    使用hibernate5和spring5之后,如果你使用hibernate.cfg.xml文件对数据库进行连接的话会出现该问题,具体原因目前不清楚。如果出现该问题你可以通过以下方式去解决这个问题

    1. 在applicationContext中配置数据源
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
       <property name="username" value="${jdbc.username}"></property>
       <property name="password" value="${jdbc.password}"></property>
       <property name="url" value="${jdbc.url}"></property>
       <property name="driverClassName" value="${jdbc.driver}" ></property>
        </bean>
      如上面所示,在spring的配置文件中把数据源进行配置,而不是用hibernate进行连接,这个方案是我推荐使用的。
    还有第二种解决方式,我先把解决方案贴出来:
             2.在hibernate的配置文件中增加属性:
    <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>

    同时还要引入相关的jar包,包的位置位于:hibernate-release-5.0.12.Finalliboptionalc3p0,

    在其目录下的三个jar包都需要引入:c3p0-0.9.2.1.jar,hibernate-c3p0-5.0.5.Final.jar,mchange-commons-java-0.2.3.4.jar

    附上原博客地址:http://blog.csdn.net/bolon_578/article/details/50825462

    在使用第二种解决方案时,请先删除hibernate配置文件中的
    <property name="hibernate.current_session_context_class">thread</property>  

    否则会报新的错:getFlushMode is not valid without active transaction

    具体的原因:

    hibernate.current_session_context_class这个代码的用处是通过getCurrentSession()获得当前的session,但是spring中的事务是在配置文件中配置自动开启的,当前线程没有开启事务的代码,
    所以不能够transaction。
    附上详解博客:http://blog.csdn.net/maoyuanming0806/article/details/61417995,感谢作者帮了我大忙。

     
  • 相关阅读:
    KVM/QEMU/qemu-kvm/libvirt 概念全解
    OpenStack 实现技术分解 (7) 通用库 — oslo_config
    OpenStack 实现技术分解 (7) 通用库 — oslo_config
    OpenStack 实现技术分解 (6) 通用库 — oslo_log
    OpenStack 实现技术分解 (6) 通用库 — oslo_log
    模拟用户注册功能
    007-解决下载文件【中文文件名】乱码
    006-动态生成验证码Servlet代码模板
    CodingLife的CSS样式整理
    Servlet用户登录功能实现
  • 原文地址:https://www.cnblogs.com/dengkaien/p/7912432.html
Copyright © 2011-2022 走看看