4

特定のフラグのテーブルから返されるレコードの数と、他のフラグ値のすべてのレコードを制限する必要があるという要件があります。

例: contact-historytable には、IorM_flg可能な値 'm' および 'o' で呼び出される要素があります。

「o」の 10 レコードと「m」のすべてのレコードのみを返す必要があります。

このためにユニオンを使用してクエリを作成しようとしていました。このようなもの:

select ch from contact_history where ch.rownum <= 10 and ch.IorM_flg = 'o'
Union All
select ch from contact_history where ch.IorM_flg != 'o'

これは可能ですか?JPAクエリであることに注意してください。(contact_history はオブジェクト名)

他のより良い提案は大歓迎です!

4

2 に答える 2

2

JPA は UNION をサポートしていませんが、EclipseLink を使用すると、UNION は JPQL でサポートされます。また、COLUMN 演算子を使用して、rownum などの特別な列にアクセスできます。

http://java-persistence-performance.blogspot.com/2012/05/jpql-vs-sql-have-both-with-eclipselink.htmlを参照してください。

于 2013-06-12T14:00:09.257 に答える
1

いいえ、JPQL には UNION (ALL) がないため、これはできません。さらに、rownum を使用してクエリ文字列自体に返される行の量を制限する方法はありませんが、これはsetMaxResultsを介して行われます。

多くの状況で

  • 2 つのクエリを実行し、
  • setMaxResults を使用して最初の結果の数を制限し、
  • 重複を破棄し、Java で両方のクエリの結果を結合する

実行可能なソリューションです。

于 2013-06-11T20:02:14.087 に答える