序数パラメーターと IN 句を使用した名前付きクエリに問題があります。
これは私の名前付きクエリです:
@NamedQuery(name = "Photo.getByIds", query = "FROM Photo i WHERE i.User.idUser = ?1 AND i.idPhoto IN ?2")
写真のリストを取得するコードは次のとおりです。
TypedQuery<Photo> q = entityManager.createNamedQuery("Photo.getByIds", Photo.class);
q.setParameter(1, 50);
q.setParameter(2, Arrays.asList(50, 51));
List<Photo> photoList = q.getResultList();
そして、それは私が得続けるエラーです:
org.hibernate.QueryException: Named parameter does not appear in Query: 1 [FROM entity.Photo i WHERE i.User.idUser = ?1 AND i.idPhoto IN (:x20_, :x21_)] <java.lang.IllegalArgumentException: org.hibernate.QueryException: Named parameter does not appear in Query: 1 [FROM entity.Photo i WHERE i.User.idUser = ?1 AND i.idPhoto IN (:x20_, :x21_)]>java.lang.IllegalArgumentException: org.hibernate.QueryException: Named parameter does not appear in Query: 1 [FROM br.gov.sus.cadsus.entity.CadsusImagemFoto i WHERE i.cadsusFotografia.coSeqFotografia = ?1 AND i.coSeqImagem IN (:x20_, :x21_)]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1376)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:255)
Caused by: org.hibernate.QueryException: Named parameter does not appear in Query: 1 [FROM entity.Photo i WHERE i.User.idUser = ?1 AND i.idPhoto IN (:x20_, :x21_)]
at org.hibernate.hql.classic.QueryTranslatorImpl.getNamedParameterLocs(QueryTranslatorImpl.java:551)
at org.hibernate.loader.Loader.bindNamedParameters(Loader.java:1910)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1845)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716)
at org.hibernate.loader.Loader.doQuery(Loader.java:801)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2542)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:940)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
... 25 more
どうしたの?これらのメソッド/関数/jpql の構文を確認したところ、すべて問題ないようです。名前付きパラメーターも使用してみましたが、うまくいきました。しかし、それは私にとって解決策ではありません。序数パラメーターを使用する必要があります。
誰かが手がかりを持っていますか?