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

问题描述 投票:0回答:3

我有一个查询,如下所示:

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中?当我尝试这样做并编译时,它会抛出一个错误,抱怨 tokenWITH:

2017 年 6 月 19 日上午 10:38:58 org.hibernate.hql.internal.ast.ErrorCounter 报告错误 错误:第 1:1 行:意外标记:WITH 2017 年 6 月 19 日上午 10:38:58 org.hibernate.hql.internal.ast.ErrorCounter 报告错误 错误:第 1:1 行:意外标记:WITH 第 1:1 行:意外标记:WITH

hibernate hql
3个回答
4
投票

Hibernate 不支持通用表表达式,但是如果您希望能够引用 SubQ 查询,这样就不必重复它,您可以将其定义为数据库上的视图,然后将 Hibernate 实体映射到该视图查看。


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

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.