Java異常之More than one table found in namespace (, ) t_user

版權聲明:本文爲 小異常 原創文章,非商用自由轉載-保持署名-註明出處,謝謝!
本文網址:https://blog.csdn.net/sun8112133/article/details/106771815


今天在做 SSH 整合的時候,在啓動 Tomcat 時報異常,經過查閱相關資料,終於把它解決了,順便來個總結吧。。。。

說起這個異常來,真的是特別頭疼,請教了很多有十幾年開發經驗的大牛都沒有解決,最終還得靠自己探索啊。。。

話不多說,先把異常信息放上來讓大家看看。


異常信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : t_user

異常


大概意思是:

從庫中找到了多個名字叫 t_user 的表。


很納悶:

根據異常提示信息去庫中找另一張 t_user 表,根本沒有!我的庫中就那麼三張表,難道我眼睛出問題了?帶着這個問題去尋訪百度,也沒有什麼解決方案,拿着報錯信息和 Demo 去羣裏找大牛,反倒被大家說了一頓:什麼時候了還用 SSH,快換成 Spring Boot 吧,基礎沒學好,Hibernate 自動創建表你沒搞懂啊。。。反正啊說了一堆沒用的東西。


解決方案:

最後我想到了可能是 MySQL 驅動問題,經過測試還真是。。我一開始用的是 mysql-connector-java-8.0.16.jar,後來換成 mysql-connector-java-5.1.43.jar 就莫名其妙的好了。我只知道 8.0 版本在數據庫連接驅動信息發生了改變,由原來的 com.mysql.jdbc.Driver 變成了 com.mysql.cj.jdbc.Driver,其他的就不知道了,於是我開始尋找 8.05.x 的區別,後來在網上一篇博客中得知:原來在 6.x 版本驅動的時候就將參數 nullCatalogMeansCurrent 的默認值由 true 改爲了 false

這個參數的意思是:是否默認返回 datasource 指定庫的表。也就是如果爲 true,那麼就從我們指定的數據庫中找表;如果爲 false,那麼就從所有庫中找表。

這下相信大家也明白了吧,我找遍了所有的庫,果然在一個不起眼的庫中找到了相同名字 t_user 的表。

解決方案我這裏總結了兩種:

  1. 將 MySQL 驅動 8.0 版本的降低到 5.x 版本;

  2. 初始化連接的時候,爲 nullCatalogMeansCurrent 參數指定爲 true

    jdbc.url=jdbc:mysql:///sys?useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true
    

如果還有更好的解決方案請在留言處告知我,謝謝!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章