2

それぞれが異なる文字列定数を選択する複数の select ステートメントを結合する JPQL ステートメントを作成しました。単純化されたクエリは次のようになります。

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 が最初の select ステートメントの後にすべてを無視する明確な理由はありますか? 違いがある場合は、Hibernate 4.1.9 を JPA 実装として使用し、MySQL データベースを使用しています。

4

1 に答える 1

3

JPQLにはUNIONのような概念はありません。したがって、それを持つ「クエリ」は JPQL ではないため、無効な JPQL として拒否する必要があります ( DataNucleus JPAは確かにそうします)。

于 2013-02-25T08:16:48.367 に答える