關於錯誤: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.Final\lib\optional\c3p0,

在其目錄下的三個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,感謝作者幫了我大忙。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM