執行 Hibernate Criteria 查詢時拋出異常:
org.hibernate.QueryException: could not resolve property: user.uuid of: com.chebeiyuan.entity.Usercar
堆棧跟蹤顯示錯誤發生在 CriteriaQueryTranslator.getColumns,表明 Hibernate 無法在 Usercar 實體中找到 user.uuid 路徑。
在 Criteria 查詢中嘗試通過關聯屬性路徑(如 user.uuid)進行條件過濾,但 Usercar 實體類中:
User 的關聯映射(@ManyToOne 或 @OneToOne)。user(可能是 userId、owner 等)。User 實體中主鍵屬性不名為 uuid。最佳回答建議:「設了別名就行了」。具體做法是在創建 Criteria 時為關聯實體指定別名:
Criteria criteria = session.createCriteria(Usercar.class, "uc");
criteria.createAlias("uc.user", "u"); // 為關聯屬性 user 起別名 u
criteria.add(Restrictions.eq("u.uuid", someUuidValue));
或使用 DetachedCriteria 子查詢方式避免別名問題。
Usercar 中有 @ManyToOne private User user; 且 User 有 @Id private String uuid;。FROM Usercar uc WHERE uc.user.uuid = :uuid 更直觀且編譯期可檢查。hibernate.show_sql=true)觀察生成的 SQL,快速定位列名不匹配問題。Hibernate 無法解析屬性路徑通常源於映射定義與查詢代碼不一致。通過 createAlias 顯式指定關聯別名,或改用 HQL 直接引用關聯屬性,均可快速解決此類 QueryException。