JPA は名前付きネイティブクエリの IN 句にリストを渡します 質問する

JPA は名前付きネイティブクエリの IN 句にリストを渡します 質問する

JPA の名前付きクエリにリストを渡すことができるのは知っていますが、NamedNativeQuery はどうでしょうか? さまざまな方法を試しましたが、まだリストを NamedNativeQuery に渡すことができません。NamedNativeQuery の in 句にリストを渡す方法をご存知の方はいらっしゃいますか? どうぞよろしくお願いいたします!

NamedNativeQuery は以下のとおりです。

@NamedNativeQuery(
   name="User.findByUserIdList", 
   query="select u.user_id, u.dob, u.name, u.sex, u.address from user u "+
         "where u.user_id in (?userIdList)"
)

そしてそれは次のように呼ばれます:

List<Object[]> userList = em.createNamedQuery("User.findByUserIdList").setParameter("userIdList", list).getResultList();

しかし、結果は期待通りではありませんでした。

System.out.println(userList.size());  //output 1

Object[] user = userList.get(0);
System.out.println(user.length);   //expected 5 but result is 3
System.out.println(user[0]);       //output MDAVERSION which is not a user_id
System.out.println(user[1]);       //output 5
System.out.println(user[2]);       //output 7

ベストアンサー1

上記の受け入れられた回答は正しくなく、私を何日も軌道から外れさせました!!

JPA と Hibernate はどちらも、Query を使用してネイティブ クエリでコレクションを受け入れます。

ただやる必要がある

String nativeQuery = "Select * from A where name in :names"; //use (:names) for older versions of hibernate
Query q = em.createNativeQuery(nativeQuery);
q.setParameter("names", l);

同じことを示唆する回答も参照してください(上記の例はそのうちの1つから選びました)

  1. 参考文献1
  2. 参照2では、リストをパラメータとして与えると括弧が機能する場合について言及している

*これらの参照は jpql クエリに関するものですが、コレクションの使用はネイティブ クエリでも機能することに注意してください。

おすすめ記事