Hibernate入門第一課——遇到的問題
筆者在學習hibernate遇到了兩個問題
第一個問題資料庫連結錯誤,報錯資訊如下
Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
看到網上大多數文章都是說是hibernate.cfg.xml配置錯誤如:使用者名稱,密碼,資料庫的url等配置錯誤,這種情況確實有可能發生,但筆者的問題並不是,在各種論壇裡查詢之後,發現是jdbc的版本錯誤,如果各位遇到和我一樣的問題,請根據自己的hibernate版本和資料庫版本應用合適的jdbc
在這裡告訴各位hibernate5.x和mysql8.0適用的jdbc版本為mysql-connector-java-5.1.44(筆者用的是hibernate5.1,mysql的版本為8.0),在這裡附上mysql-connector-java-5.1.44的下載連結
提取碼:i0ut
Field 'id' doesn't have a default value
這個問題的原因是id主鍵沒有設定為自動遞增
這個問題網上有兩種解決方法
解決方法一: 開啟my.ini,查詢 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改為 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 然後重啟MYSQL解決方法二:
解決方法三:
修改hbm.xml的id屬性配置
<id name="id" type="java.lang.Integer" access="field">
<column name="ID" />
<generator class="native" />
</id>
將其中的generator的class屬性設定為identity,筆者試過這種方法,在筆者的工程裡並沒有解決問題,在這裡附上generator的class屬性7種可選值(共七中)
1、identity:用於MySql資料庫。特點:遞增
2、sequence:用於Oracle資料庫
3、native:跨資料庫時使用,由底層方言產生
4、hilo:通過高低位合成id,先建表hi_value,再建列next_value。必須要有初始值
5、sequencehilo:同過高低位合成id,建一個sequence序列,不用建表。
6、assigned:使用者自定義id
7、foreign:用於一對一關係共享主健時,兩id值一樣
解決方法四:
以上方法都沒有解決筆者的問題,通過以上三種方法的啟發,筆者心想:既然這個問題的原因是id主鍵沒有設定為自動遞增,那我修改一下建立的表的結構不就行了。於是筆者便直接在命令列裡輸入修改id屬性的語句
alter table 'tablename' modify id int(11) auto_increment;
果然問題就解決了
注:直接在navicat下修改相應的表的id屬性也是可以的
希望此篇心得體會能夠幫到各位!