我有一个看起来像的查询:
WITH SubQ AS
(SELECT elh.encntr_id, elh.location_cd
FROM encntr_loc_his elh
WHERE ...)
SELECT e.encntr_id
FROM encounter e
WHERE e.location_cd IN
(SELECT SubQ.location_cd
FROM...)
...
此查询中还有其他一些细节,SubQ已经使用了很多。我的问题是,是否可以将此查询作为命名查询(namedquery)放在HQL中?当我尝试这样做并进行编译时,它会引发错误,抱怨令牌:
2017年6月19日上午10:38:58 org.hibernate.hql.internal.ast.ErrorCounter reportError 错误:第1行:1:意外令牌:WITH 2017年6月19日上午10:38:58 org.hibernate.hql.internal.ast.ErrorCounter reportError 错误:第1行:1:意外令牌:WITH 第1:1行:意外的令牌:WITH
答案 0 :(得分:1)
Hibernate不支持公用表表达式,但是如果你想能够引用你的SubQ查询而不必重复它,你可以将它定义为数据库上的一个视图,然后映射一个Hibernate实体那种观点。
答案 1 :(得分:1)
没有直接支持,但我能够使用 createNativeQuery API 和 MySQL 8.014 和 Hibernate 5.2.16 运行 CTE
EntityManager entityManager = _entityManagerFactory.createEntityManager();
Query q = entityManager.createNativeQuery(query, YourReturnTypePojo.class);
List<Object[]> a = q.getResultList();