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

Hibernate 配置檔常見異常排查與解決方案

     編輯:Java 相關知識

前言

在開發 Web 應用時,Hibernate 映射檔 (*.hbm.xml) 配置錯誤是常見問題。本文整理兩個典型異常案例,說明成因與修正方法,幫助開發者快速定位並解決問題。

異常一:主鍵生成策略缺失

異常堆疊

org.springframework.orm.hibernate3.HibernateSystemException: 
ids for this class must be manually assigned before calling save(): 
com.ebupt.ncsp.assist.service.department.domain.Department
nested exception is org.hibernate.id.IdentifierGenerationException: 
ids for this class must be manually assigned before calling save(): ...

原因分析

<id> 元素映射資料表主鍵,但缺少子元素 <generator> 配置。Hibernate 無法決定主鍵生成方式,導致儲存時拋出異常。

解決方法

在 <id> 下添加 <generator class="native"/> (或 increment、identity、sequence、hilo 等,視資料庫支援度而定)。建議使用 native 讓 Hibernate 自動選擇適合底層資料庫的策略。

<id name="id" column="dept_id">
    <generator class="native"/>
</id>

經驗提醒:手動編寫映射檔易疏漏細節,新手建議多參考官方文件,或使用自動生成工具 (如 Middlegen、Hibernate Tools) 降低錯誤率。

異常二:屬性存取與型別不匹配

異常堆疊

org.springframework.orm.hibernate3.HibernateSystemException: 
exception setting property value with CGLIB 
(set hibernate.cglib.use-reflection-optimizer=false for more info) 
setter of com.info.beran.com.SetComCode
nested exception is org.hibernate.PropertyAccessException: ...

原因分析

  1. 資料庫欄位型別 (如數值型) 與映射檔宣告型別不一致。
  2. 資料庫中數值型欄位允許 NULL,但 Java 實體類對應屬性為基本型別 (int、long 等),基本型別無法接受 null 值導致設值失敗。

解決方法

  1. 統一映射檔與資料庫欄位型別,例如皆設為 Integer。
  2. 將實體類中對應數值型欄位的屬性由基本型別改為包裝類型 (Integer、Long 等),包裝類型可接受 null,避免 PropertyAccessException。
<property name="someNumber" type="java.lang.Integer" column="num_col"/>

結論:上述兩個異常若使用自動生成工具通常不會發生。手動配置時務必核對 <id> 生成器與屬性型別對應關係,養成查閱參考文件的習慣。

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