【Java で Web開発(Spring)】JpaRepository で変数部分が Not Found になる問題

何の記事??

Spring フレームワークでよく使われる JpaData のライブラリ、JpaReposiotry でエラーが出て困ったので解決策をメモがてら記事にします。

原因は本当にしょうもない内容でしたが、、、ハマるときははまってしまうものです笑


エラー内容

@Query(value = "SELECT * FROM hoge WHERE name = :my_name;", nativeQuery = true)
public List getCustomerList(@Param("my_name") String my_name);

JpaRepository では、生のクエリを実行したい時にこんな感じで @Query アノテーションを使います。 my_name が変数になっており、呼び出し元から引数で指定することでクエリの WHERE 句を動的に指定できます。 ただし・・・ここで問題が!! 「variable my_name is not found.」の記載が!!◝(๑⁺д⁺๑)◞՞ ありえないですが、人間ハマってしまった時は、変なことでも試してしまうものです笑 my_name を myName に変えたり name に変えたりしても、全て「not found」でした笑


解決方法

冒頭に書いた通り原因はとてもしょうもない・・・僕の凡ミスでした笑 解決方法というとだいぶ大げさで恥ずかしいですが、以下のようにすれば解決です。

@Query(value = "SELECT * FROM hoge WHERE name = :my_name ;", nativeQuery = true)
public List getCustomerList(@Param("my_name") String my_name);

どこが変わったかお分かりですか?? なんと :my_name と ; の間にスペースを入れただけです笑 「my_name;」として一つの変数に解釈されてしまっていたんですね。 あぁ、こんなのに30分もハマってしまっていた自分が〜〜となったので同じことにならないように皆さまも気をつけてくださいね。


最後に

最近は、機械学習の勉強をメインにやっていたため記事に起こすのがなかなか難しく・・・業務のことはかけないですしね(データ公開なんてしたら一発KOです) やはり記事にするためにはもっと理解を深めないといけないんだなぁと日々痛感しています。

こういうハマってしまったエラーの解決策を蓄積していっていつかは検索できるようにできたらなぁと思っています。