首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

異常分析:java.sql.SQLException: Field 'id' doesn't have a default value 解決方案

     編輯:Java 相關知識

異常堆疊

org.springframework.orm.hibernate3.HibernateJdbcException: could not insert: [com.ssh.domain.Revert]
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
    ...
    at com.ssh.action.user.ArticleAction.revertArticle(ArticleAction.java:229)

根因

MySQL 表 `revert` 的主鍵 `id` 列未設置 `AUTO_INCREMENT`,且 Hibernate 映射未指定主鍵生成策略(或策略為 `assigned`),導致插入時 `id` 為 `null`,資料庫拋錯。

解決方案(任選一)

  1. 資料庫層面:修改表結構
    ALTER TABLE revert MODIFY id INT PRIMARY KEY AUTO_INCREMENT;
    
  2. Hibernate 映射(hbm.xml):指定原生自增策略
    <id name="id" column="id" type="java.lang.Integer">
        <generator class="native"/> <!-- 或 identity -->
    </id>
    
  3. 註解映射:
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    
  4. 手動賦值:業務代碼在 save 前設置唯一 id(不推薦)

驗證

重新部署測試插入,觀察 `id` 自動生成無異常。

結語

主鍵生成策略與資料庫定義不一致是導致此錯誤的核心原因,統一雙邊配置即可解決。

出處:bianceng.cn

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved