こんにちは、さるまりんです。
JPQLでPostgreSQLにLIMIT
付きでSELECT
を投げようとしました。
こんなSQLです。
SELECT * FROM composers ORDER BY id LIMIT 1;
JPQL
で
@Query("SELECT c FROM Composer c ORDER BY c.id LIMIT 1")
とするとエラーで動きません。
さあどうするか。
簡単にやるには
@Query(value="SELECT * FROM Composer c ORDER BY c.id LIMIT 1", nativeQuery=true)
とnaitiveQuery=true
にすると、psql
で動くクエリがそのまま使えます。
が、これをするとせっかくJPQLで実装しているのに。。ということがあるみたいです。
さあどうするか。(2回目)
Spring Data JPA
を使っているなら
findFirstByOrderById()
のようにすることで、一つ目のデータのみ取得することができます。
クエリがもう少しややこしくて
SELECT * FROM composers WHERE last_name = [姓] ORDER BY id
のようにWHERE句があるのであれば
findFirstByLastNameOrderById(String lastName)
のようにします。
あとはsetMaxResult()
を使って、結果の最大数を制限することもできます。
TypedQuery<Student> query = entityManager.create("SELECT c Composer c ORDER BY c.id", Composer.class);
query.setMaxResults(1);
それぞれ利点があると思うので、場合によって使い分けですね。
今回は影響などを考えてnativeQuery=true
で対応しましたが、これで良かったのかしら?
改めてよく考えてみます。
読んでくださってありがとうございました。
それではまた!