我有一個方法試圖使用HQL在數據庫中執行相當複雜的查詢。我的實體類都用註釋映射,並在編譯期間被發現,未明確列出。爲什麼HQL會導致「類未映射」異常?
在下面的代碼:
List<Message> ms = ((Session) entityManager.getDelegate())
.createCriteria(MessageCRI.class).list();
log.info("Got " + ms.size() + " CRIs");
List<Message> msgs = ((Session) entityManager.getDelegate())
.createQuery(
"from MessageCRI c where c.rfdId in (select id from MessageRFD rfd where rfd.ssrId = :ssrId)")
.setParameter("ssrId", ssrId).list();
第一個調用成功 - 我在日誌中收到一條消息,指出「用了2個投資中心」或諸如此類。然而,下一次調用失敗,產生一個根本原因爲「org.hibernate.hql.ast.QuerySyntaxException:MessageCRI未映射的堆棧」
我可能會丟失什麼?
我會使用Criteria API,但這看起來比我可以輕鬆清楚地處理使用Criteria更復雜。我可能會重新審視這個決定。我也正在重新編譯使用我設置的名稱(以便表名與現有的表匹配)。 – Bret 2011-05-13 18:03:04
好運氣。是的,詳細程度是不能步入某種東西的合理原因(仍然,我已經習慣了標準API)。至於JPQL,它和HQL一樣冗長。您可以隨時將其移植到不同的ORM解決方案(比如EclipseLink,或者甚至可能更特別的東西,例如Google Datastore的DataNucleus JPA實現:D。我們從不知道......) – 2011-05-13 18:13:45