1. ホーム
  2. java

[解決済み] JPQLのLIMIT句の代替は何ですか?

2023-07-14 16:56:52

質問

JPQLで実装したPostgreSQLのクエリで作業しています。

これは、正常に動作するpsqlのネイティブクエリのサンプルです。

SELECT * FROM students ORDER BY id DESC LIMIT 1;

JPQLで同じクエリを実行してもうまくいきません。

@Query("SELECT s FROM Students s ORDER BY s.id DESC LIMIT 1")

Students getLastStudentDetails();

LIMIT句はJPQLでは機能しないようです。

JPAのドキュメントによると setMaxResults/setFirstResult を使用することができます。

どのように解決するには?

JPQLを使用していますが、このような結果の制限をサポートしていません。ネイティブのJPQLを使用する場合は setMaxResults を使用して、結果を制限する必要があります。

しかし、あなたはSpring Data JPAを使用しているので、基本的にはかなり簡単にできます。参照 を参照してください。 を参照してください。あなたの場合、次のような find メソッドはまさにあなたが望むことを行うでしょう。

findFirstByOrderById();

を使うこともできます。 Pageable の代わりに LIMIT 句の代わりに

@Query("SELECT s FROM Students s ORDER BY s.id DESC")
List<Students> getLastStudentDetails(Pageable pageable);

そして、呼び出し側のコードで次のようにします(説明の通り ここで を参照)。

getLastStudentDetails(PageRequest.of(0,1));

どちらも同じ結果になるはずで、普通のSQLに頼る必要はありません。