如何在JPA @Query注释中使用IN子句

时间:2015-07-16 09:16:38

标签: java hibernate jpa orm entitygraph

我定义了这个方法

setContentOffset

带有id的列表不为null,也不为空,但我总是得到以下异常:

scrollview

我很确定它与它所定义的IN子句的方式有关。

欢迎任何建议!

3 个答案:

答案 0 :(得分:3)

这是一个常见问题,@EntityGraph中的错误,您可以在以下网址找到:

NullPointer when combining JPQL query with in clause and @NamedEntityGraph 它说:

  

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

替换为:

"Select p from product where p.id in(:idList)" -- OK