【发布时间】:2017-10-29 16:28:58
【问题描述】:
因此,我正在从使用本机查询检索数据的旧应用程序中迁移一些服务,并且我发现了一些问题,并想讨论解决这些问题的最佳方法。
主要问题是该服务使用了一个本机查询,该查询包含通过UNION 语句连接的其他几个查询。像这样的:
WITH TMP_QUERY AS (
select p.id,p.name from PROCESS p inner join TABLE_B on ...
UNION
select p.id,p.name from PROCESS p inner join TABLE_C on ...
UNION
select p.id,p.name from PROCESS p inner join TABLE_A on ...)
select p.name from PROCESS p inner join TMP_QUERY tmp on p.id = tmp.id order
by 1
由于JPA 不支持UNION 语句,我想到的唯一解决方案是分别执行这些查询,然后在java 代码中执行重复删除、排序和分页。
也许将结果添加到集合中以删除重复项,然后应用Comparator 对返回的实体进行排序。但另一个问题是我还需要分页,因为这些查询中的任何一个都可能返回 10 到 1000 个结果,这将导致服务器超时问题。
有人处理过类似的事情吗?
【问题讨论】:
-
如果您使用外部自联接,您似乎可以取消
UNIONs,如SELECT ... FROM PROCESS p0 LEFT OUTER JOIN TABLE_B ON ... LEFT OUTER JOIN TABLE_C ON ... WHERE TABLE_B.id is not null OR TABLE_C.id is not null