Как использовать предложение IN в аннотации JPA @Query
Я определил этот метод
@Query("select cs from CenterStudy cs where cs.id in (?1)")
@EntityGraph(value = "centerStudyAndNotifiedUsers", type = EntityGraph.EntityGraphType.LOAD)
List<CenterStudy> findAllByIdsWithCenterAndUsers(List<Long> ids);
Список с идентификаторами не является ни пустым, ни пустым, но я всегда получаю следующее исключение:
java.lang.NullPointerException
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:613)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1900)
Я почти уверен, что это как-то связано с определением предложения IN.
Любые предложения приветствуются!
3 ответа
Это общая проблема, ошибка в Hibernate
который вы можете найти по адресу:
NullPointer при объединении запроса JPQL с предложением in и @NamedEntityGraph, где говорится, что:
Когда вы комбинируете запрос JPQL с предложением in и @NamedEntityGraph, вы получаете NullPointerException в org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67) при выполнении запроса.
Так что вам придется удалить @EntityGraph
аннотация здесь, чтобы решить эту проблему.
public List<DealInfo> getDealInfos(List<String> dealIds) {
String queryStr = "SELECT NEW com.admin.entity.DealInfo(deal.url, deal.url, deal.url, deal.url, deal.price, deal.value) " + "FROM Deal AS deal where deal.id in :inclList";
TypedQuery<DealInfo> query = em.createQuery(queryStr, DealInfo.class);
query.setParameter("inclList", dealIds);
return query.getResultList();
}
Работает с JPA 2
Я сталкивался с этой проблемой раньше. Я исправил это, используя именованные параметры вместо позиционных параметров. Пример:
"Select p from product where p.id in(?)" -- not working
заменен на:
"Select p from product where p.id in(:idList)" -- OK