JPA只在union中执行第一个select语句?

时间:2013-02-25 08:03:24

标签: jpa jpql

我编写了一个JPQL语句,它将多个select语句组合在一起,每个语句选择一个不同的字符串常量。查询的简化版本如下所示:

SELECT DISTINCT 'A' AS widget_type
  FROM WidgetA widgetA
  WHERE widgetA.creationTimestamp > :cutoff
UNION SELECT DISTINCT 'B' AS widget_type
  FROM WidgetB widgetB
  WHERE widgetB.creationTimestamp > :cutoff

查询不会导致任何错误,但我没有得到我期望的结果。我看到生成的SQL没有任何联合 - 它只从第一个选择查询表:

select distinct 'A' as col_0_0_ 
from widget_a widget0_
where widget0_.creation_timestamp>?

有没有明显的理由说明为什么JPA会在第一个选择陈述之后忽略所有内容?如果它有所不同,我使用Hibernate 4.1.9作为JPA实现,使用MySQL数据库。

1 个答案:

答案 0 :(得分:3)

JPQL没有像UNION这样的概念。因此,任何具有它的“查询”都不是JPQL,因此应该作为无效的JPQL(DataNucleus JPA当然会这样做)被拒绝