session.createCriteria(User.class) 正常,session.createQuery("from User") 報 User is not mapped。
HQL 查詢使用**實體類名**(而非表名),且要求實體已被 SessionFactory 識別。常見原因:
hibernate.cfg.xml 或 persistence.xml)。@Entity、@Table。User 需與實體類名完全一致(區分大小寫)。| 檢查項 | 正確示例 |
|---|---|
| hibernate.cfg.xml 映射 | <mapping class="com.example.User"/> |
| Spring LocalSessionFactoryBean | setPackagesToScan("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 對象,故不受映射名稱影響。