4

我已经定义了这个方法

 @Query("select cs from CenterStudy cs where cs.id in (?1)")
 @EntityGraph(value = "centerStudyAndNotifiedUsers", type = EntityGraph.EntityGraphType.LOAD)
 List<CenterStudy> findAllByIdsWithCenterAndUsers(List<Long> ids);

具有 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 子句的方式有关。

欢迎任何建议!

4

3 回答 3

3

这是一个常见问题,Hibernate您可以在以下位置找到一个错误:

NullPointer 将 JPQL 查询与 in 子句和 @NamedEntityGraph 结合使用时,它表示:

当您将 JPQL 查询与 in 子句和 @NamedEntityGraph 结合使用时,您会在执行查询时在 org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67) 中获得 NullPointerException。

因此,您必须在@EntityGraph此处删除注释才能解决此问题。

于 2015-07-16T09:55:31.167 回答
1
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

于 2015-07-16T09:30:55.130 回答
0

我以前遇到过这个问题。我使用命名参数而不是位置参数来修复它。例子:

"Select p from product where p.id in(?)" -- not working

取而代之:

"Select p from product where p.id in(:idList)" -- OK
于 2016-08-11T14:46:20.160 回答