1. 程式人生 > >Hibernate入門第一課——遇到的問題

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解決方法二:

MySQL 5 uses a strict mode which needs to be disabled. In Windows, Goto Start-->Programs-->MySQL->MySQL Instance Config Wizard. Follow through the Reconfigure Instance option-->Detailed Configuration-->Continue Next a few screens. At the bottom under Enable TCP/IP option there is 'Enable Strict Mode'. Deslect this option (no tick). Save changes and MySQL will restart.

解決方法三:

修改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屬性也是可以的

希望此篇心得體會能夠幫到各位!