最終更新日:2020‐04-02
JPAを使った実装でnative query + paginationを利用すると、paginationが全体の件数を求めるためか、自動生成でSELECT COUNT(*)~というSQLを生成してクエリ発行します。
しかし、これがどういうタイミング分からないのですが、SELECT COUNT(WHERE)のようなSQLを生成して、クエリを発行する場合があります。
stackoverflow.comの報告例
回避方法
@Queryには、countQuery というパラメータを指定できますので、これを設定してあげると自動生成されず、COUNT(WHERE)などという訳のわからんSQLは発行されなくなります。 下のコードは、パラメータの指定方法を少し手直ししてます。
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = :lastname",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = :lastname",
nativeQuery = true)
Page<User> findByLastname(Pageable pageable, @Param("lastname") String lastname);
https://stackoverflow.com/questions/38349930/spring-data-and-native-query-with-pagination
技術の進化についていけていないシステムエンジニア。浅く広く、何でも大体はこなせるエンジニアで重宝されてる(つもり)。でもやっぱり特化した武器欲しい。
備忘録として記事を投稿していますが、少しでも誰かの助けになればと思います。
最近はプロジェクトでReact(TypeScript )を触っています。
趣味でギター弾きます。