いくつかのサービスを移行しています。ネイティブクエリを使用してデータを取得した古いアプリケーションで、いくつかの問題を見つけて解決する最善の方法について議論したいと思います。JPAでUNIONを使用するクエリを取得する
主な問題は、このサービスでは、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
を適用して返されたエンティティを注文することがあります。しかし、もう1つの問題は、これらのクエリのいずれかが10秒から1000秒の結果からサーバータイムアウトの問題につながる可能性があるため、ページネーションも必要であるということです。
誰かが同様のことをしたことがありますか?
ます場合は、 'UNION'sと離れて行うことができますように見えます'外部からのセルフジョインを使用する' SELECT ... FROM PROCESS p0 LEFT OUTER JOIN TABLE_B ON ... LEFT OUTER JOIN TABLE_C ON ... WHERE TABLE_B.idがヌルでないかTABLE_C.idがヌルでない ' – JimmyB