標籤:des style http color os io java ar 檔案
Field ‘id‘ doesn‘t have a default value問題解決方案
突然想溫習溫習對資料庫的讀寫,於是就用mysql建了一張單獨的表(見代碼1),用Hibernate寫了個應用,可以正常查詢、修改資料了。開始時,資料是在mysql的GUI工具裏手工輸入的,嫌煩,於是就想到用程式批量產生一些,於是麻煩也跟著來了……
代碼1
Sql代碼 - CREATE TABLE `stitp`.`Ticket` (
- `id` int(11) NOT NULL,
- `state` tinyint(1) NOT NULL,
- `grade` int(2) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=gbk
運行插入資料的java代碼,報異常:field ‘id‘ doesn‘t have a default value沒錯啊,我的主鍵怎麼可能有預設值呢?不理解。Google了一下這個異常,一大坨結果,總結一下就是那麼兩種方法:
解決方案一:開啟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.
都試了,沒用,而且我是Fedora,沒有ini檔案,而是cnf檔案(我的my.cnf在/etc下面)
這個關鍵字看來是找不到辦法了,換成尋找hibernate裡對主鍵的設定吧。果然就找到了辦法!原來是.hbm.xml檔案的設定問題,在裡面把主鍵的屬性改為:
Xml代碼 - <generator class="assigned"/>
再運行就可以了。因為assigned是指主鍵是由人工分配的,而native則指主鍵值由庫自動給出。我以前都是想都沒想就加上native的,反正也不知道什麼意思,而且以前用到要插入資料的表,主鍵都是“auto increment”的,所以也沒碰到問題。這次就暴露了。
總結一下:其實就是缺乏對Hibernate的全面理解,沒有完全掌握它的各種設定。因為當初學hibernate也是抱著"需求"學的,而不是正兒八經學習它的,沒有完全理解各種設定就上手了。
Field 'id' doesn't have a default value問題解決方案