【问题标题】:How to use IN clause in JPA query in Java?如何在 Java 中的 JPA 查询中使用 IN 子句?
【发布时间】:2019-03-20 12:57:49
【问题描述】:

我有以下代码:

public Optional<KoKur> getExchangeRateFromList(final Integer code, List<KotukOdeme> paymentList){

    List<LocalDate> paymentDateList = null;
    for(KotukOdeme kotukOdeme : paymentList){
        paymentDateList.add(kotukOdeme.getOdemeTarihi());
    }

    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<KoKur> query = cb.createQuery(KoKur.class);
    Root<KoKur> koKurRoot = query.from(KoKur.class);
    query.where(
            cb.and(
                    cb.equal(koKurRoot.get("dovizTip"), code)

            )

    );
    TypedQuery<KoKur> typedQuery = entityManager.createQuery(query);
    List<KoKur> koKurList = typedQuery.getResultList();

    return koKurList.isEmpty() ? Optional.empty() : Optional.of(koKurList.get(0));
}

我在 paymentDateList 中收集本地日期列表,我想在我的查询中添加这些作为 IN 子句。所以除了“代码”之外,我还想在我的 AND 子句旁边添加 IN。当我像下面这样添加时,IDE 给了我错误;

cb.in(koKurRoot.get("tarih"), paymentDateList) 

我该怎么做?

【问题讨论】:

    标签: java spring spring-boot jpa spring-data-jpa


    【解决方案1】:

    使用cb.in(koKurRoot.get("tarih")).value(paymentDateList)

    【讨论】:

      【解决方案2】:

      这应该可以。如果需要,将其他条件添加到谓词数组

      List<Predicate> predicates = new ArrayList<>();    
      predicates.add(query.get("tarih").in(paymentDateList))
      
      query.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
      return entityManager.createQuery(query).getResultList();
      

      【讨论】:

      • 这也有效,我无法选择对我的声誉有用的 bcz
      猜你喜欢
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2017-07-20
      • 2014-02-24
      相关资源
      最近更新 更多