【Java】文字列を数値に変換するときに空文字を渡すとどうなる?【Integer.parseInt(), Integer.valueOf()】
野田竣介
フェルメール株式会社
今回はこのような質問をいただきました。
createNativeQueryのsetParameterでEnumのListを使いたいんだけどうまく使えない…
EnumのListを普通にセットするだけだと結果が0件になってしまいました。
そこで今回はこちらの質問について解説していきます!
結論から言うと、EnumのListをStringのListに変換します。
サンプルなので動作確認はできてないけど、こんな感じで動くはず!
public static List<Clothes> sample(List<Size> sizeListEnum) {
Set<String> sizeList = sizeListEnum.stream().map(Enum::toString).collect(Collectors.toSet());
return Jpa.em().createNativeQuery(
"select * from clothes where size in (:sizeList)", Clothes.class)
.setParameter("sizeList", sizeList)
.getResultList();
}
ClothesがEntity、SizeがEnumの想定です。
EnumのListをStringのList(Set)に変換してからsetParameter()に渡してあげます。
EnumのListをStringのListに変換してから使いましょう!
public static List<Clothes> sample(List<Size> sizeListEnum) {
Set<String> sizeList = sizeListEnum.stream().map(Enum::toString).collect(Collectors.toSet());
return Jpa.em().createNativeQuery(
"select * from clothes where size in (:sizeList)", Clothes.class)
.setParameter("sizeList", sizeList)
.getResultList();
}
2行目と5行目が重要!
これは私も結構ハマりました(笑)
エラーにはならないものの、createNativeQueryのsetParameterではEnumは扱えないみたいですね。
配列にしてみたり、カンマ区切りの文字列にしてみたり、いろいろ試しましたがこれが正解みたいです。
JPA難しい!(でも便利だから覚えておこう!)