Spring Data JPAのNativeQueryでIN句を使う方法




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

JPA

JPAにはJPQLというJPA上で使えるSQLみたいなものや、NativeQueryを使用して生のSQLを書くことができます。

生のSQLには変数を埋め込むことができるのですが、生のSQLのIN句に値を渡す方法が予想と違ったのでまとめます。

MySQLの場合

MySQLでSQLを書く場合はIN句には下記のようにカンマ区切りの値を渡すのでNativeQueryにもカンマ区切りの値を渡してみました。

するとエラーになることなく先頭の値に該当するレコードだけ取得できるという現象が起きました。

いっそのことエラーにしてくれた方がわかりやすいんですけどね。。。

このせいでSQLとは関係ないところばかりソースコードを調べて無駄に時間を浪費してしまいました。

NativeQuery

JPAで実際にNativeQueryを使用するためのソースコードは下記です。Kotlinで書いてます。

:idListにはカンマ区切りの文字列ではなくintの配列を渡しています。

こういうのは知らないと無駄に時間を使ってしまうので頭の片隅に入れて起きましょう。以上です!

おすすめ書籍

JPAに関しては下記パーフェクトJava EEが非常に詳しく書かれているのでぜひ読んでみてください。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です