Hibernate(HQL)是否支持公用表表达式

时间:2017-06-19 16:56:11

标签: hibernate hql

我有一个看起来像的查询:

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

2 个答案:

答案 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();