2017-09-19 32 views
1

ManyToMany関係を持ち、最初のテーブルに参照がある3番目のテーブルに関連する2つのテーブルを結合して、Pageable POJOを構築しています。 質問の中核に質問を簡略化します。SpringデータJPA - 結合テーブルのページングソート

@Query("SELECT new package.myDTO(t1.name, t2.description) FROM table1 t1, table2 t2 where t1.relatedtable.table2Id = t2.id") Page<myDTO> findSomething(Pageable pageable);

すべての私のフィールドはソート可能にする必要がありますが、私はこのクエリのHibernateの結果から気づくように、それは常に来るソートを適用するために、クエリ(この場合はTABLE1)に設けられた第1のエンティティを使用しています私のPageableオブジェクトから。私はorder by t2.description

の代わりにorder by t1.descriptionで私のソートフィールドの結果に「説明」を渡して、表2の説明でソートしたい場合は

だから私は行方不明です何かによってSortオブジェクトを構築するための具体的な方法はありますorder byで使用するテーブルを明示的に指定していますか? 私のリポジトリは、JpaRepository

ありがとうございます。

答えて

0

「t1.description」または「t2.description」をPageableのソートフィールドとして渡すと、毎回必要なテーブルを指定できます。

+0

いいえ、不幸なことに、私は何かが欠けていない限り、それを試しました。 特に、Sortでt2.descriptionを追加すると、Hibernateの結果は 'order by t1.t2.description'です。 – Nigat

+0

クエリを変更できますか?SELECT new package.myDTO(t1.name、t2.description)FROM table1 t1 LEFT JOIN t1.relatedtable t2 "を実行し、同じテストを実行して何が起こるかを確認します(エンティティT1の関連テーブルフィールドはT2型であると仮定します)。 – lzagkaretos

0

テーブル名をエスケープするには、 ``(テーブル名のどちらか片側を使用してくださいが、ここでは正しく表示されません)を試してみてください。テーブル名をエスケープすると、サブクエリを使用して同様の問題が発生したときに、Springがそれを無視するのを助けるように見えました(ソートフィールド名の前に付けないでください)。

関連する問題