執行 session.save(entity) 時拋出 MappingException: Unknown entity: User 或類似訊息。實體類、映射檔 (`.hbm.xml`) 皆存在,但 Hibernate 無法解析。
假設實體類完整名稱為 com.attest.User,映射檔 `User.hbm.xml` 內容必須為:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"https://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.attest"> <!-- 可選:設定包前綴 -->
<class name="User" table="t_user"> <!-- 若上方設定 package,這裡可寫簡短名 -->
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="username" column="username"/>
<!-- 其他屬性 -->
</class>
</hibernate-mapping>
或不使用 package 屬性,直接寫完整類名:
<class name="com.attest.User" table="t_user"> ... </class>
hibernate.cfg.xml 中:
<mapping resource="com/attest/User.hbm.xml"/> <!-- 從 classpath 根目錄起算的相對路徑,使用 / 分隔 -->
<!-- 錯誤寫法:resource="User.hbm.xml" (若檔案在包目錄下) -->
<mapping class="com.attest.User"/> 或掃描包 <property name="packagesToScan">com.attest</property> (SessionFactory 配置)。Reading mappings from resource: com/attest/User.hbm.xml?修正上述任一項後,**重新編譯部署 (Clean + Build)**,即可解決「找不到實體」問題。