現象
`session.createCriteria(User.class)` 正常,`session.createQuery("from User")` 報 `User is not mapped`。
原因
- HQL/JPQL 查詢使用**實體類名**(`User`),而非表名。要求類被 **Hibernate 識別為實體**。
- 常見原因:
① 實體類缺少 `@Entity` 註解。
② `hibernate.cfg.xml` / `persistence.xml` 中 `` 或 `` **包路徑配置錯誤**,導致實體未被掃描。
③ 實體類未編譯/未打包進 classpath(如 Maven 多模塊依賴缺失)。
修正
// 1. 實體類
@Entity
@Table(name = "t_user")
public class User { ... }
// 2. 配置掃描包(Spring/Hibernate)
com.yourpackage.entity
// 或 XML 映射
驗證
- 啟動時日誌應顯示 `Binding entity from annotated class: com.yourpackage.entity.User`。
- 無該日誌 → 掃描路徑漏掃。
參考
Hibernate User is not mapped 完整排查