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

解決 Hibernate "not found while looking for property" 映射錯誤

     編輯:Java 綜合教學

錯誤現象

在啟動 Hibernate 專案時拋出異常:

Caused by: org.hibernate.MappingException: 
class main.java.POJO.User not found while looking for property: id

這通常發生在 .hbm.xml 映射檔中,Hibernate 無法根據預設反射找到屬性的類型。

根本原因

Hibernate 在解析 <id> 或 <property> 時,若未明確指定 type 屬性,會嘗試透過反射推斷類型。若實體類未編譯、類路徑錯誤、或屬性為基本型別(如 int)而非包裝型別(Integer),可能導致推斷失敗。

解決方案:顯式指定 type 屬性

修改前 (易出錯)

<hibernate-mapping package="main.java.POJO">
    <class name="User" table="loginuser">
        <id name="id" column="Id">
            <generator class="native"/>
        </id>
        <property name="username" column="username" />
        <property name="password" column="password" />
        <property name="sex" column="sex" />
    </class>
</hibernate-mapping>

修改後 (穩健)

<hibernate-mapping package="main.java.POJO">
    <class name="User" table="loginuser">
        <id name="id" column="Id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="username" column="username" type="java.lang.String"/>
        <property name="password" column="password" type="java.lang.String"/>
        <property name="sex" column="sex" type="java.lang.String"/>
    </class>
</hibernate-mapping>

最佳實踐建議

  1. 總是顯式宣告 type:避免反射推斷帶來的不確定性,特別是基本型別欄位。
  2. 使用包裝類型:實體類屬性建議用 Integer、Long、Boolean 而非 int、long、boolean,方便表達 null。
  3. 檢查 package 屬性:<hibernate-mapping package="..."> 若指定,class name 只需寫簡短類名;否則需寫全限定名。
  4. 確認編譯輸出:確保實體類 .class 檔已正確編譯至 classpath。

延伸:常見 Hibernate 類型對照表

Java 類型Hibernate type 屬性值
int / Integerinteger / java.lang.Integer
long / Longlong / java.lang.Long
Stringstring / java.lang.String
Date / Timestampdate / timestamp / java.sql.Timestamp
BigDecimalbig_decimal / java.math.BigDecimal
byte[]binary / materialized_blob

結語

顯式指定 type 屬性是解決該錯誤最直接、最穩健的方法。養成在映射檔中完整宣告類型的習慣,能避免許多莫名其妙的啟動異常。

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