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

Hibernate HQL 報錯:User is not mapped 實體映射排查清單

     編輯:程式設計綜合問答

現象

session.createCriteria(User.class) 正常,session.createQuery("from User") 報 User is not mapped。

根本原因

HQL 查詢使用**實體類名**(而非表名),且要求實體已被 SessionFactory 識別。常見原因:

  1. 實體類未在配置中註冊(hibernate.cfg.xml 或 persistence.xml)。
  2. 包掃描路徑錯誤,實體類所在包未被掃描。
  3. 註解缺失:缺少 @Entity、@Table。
  4. 大小寫不匹配:HQL 中 User 需與實體類名完全一致(區分大小寫)。

排查清單

檢查項正確示例
hibernate.cfg.xml 映射<mapping class="com.example.User"/>
Spring LocalSessionFactoryBeansetPackagesToScan("com.example.entity")
實體類註解@Entity @Table(name="t_user") public class User { @Id Long id; }
HQL 寫法from User (類名),而非 from t_user (表名)

驗證方法

// 獲取所有已註冊實體名
Map metadata = sessionFactory.getAllClassMetadata();
for (String entityName : metadata.keySet()) {
    System.out.println(entityName); // 應包含 "com.example.User"
}

參考資源

詳細排查:新浪博客 Hibernate User is not mapped 解決

總結

User is not mapped 核心是**實體類未被 SessionFactory 識別**。按「配置註冊 → 包掃描 → 註解完整 → HQL 大小寫」四步排查,通常能定位問題。Criteria API 直接用 Class 對象,故不受映射名稱影響。

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