Как использовать предложение IN в JPA-запросе на Java?

#java #spring #spring-boot #jpa #spring-data-jpa

#java #spring #spring-boot #jpa #spring-data-jpa

Вопрос:

У меня есть этот код ниже:

 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));
}
  

Я собираю список localdates в paymentDateList, я хочу добавить их в предложение as IN в моем запросе. Итак, помимо «кода», я также хочу добавить рядом с моим предложением AND . Когда я добавляю подобное ниже, IDE выдает мне ошибку;

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

Как я могу это сделать?

Ответ №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();
  

Комментарии:

1. это также сработало, я не смог выбрать как полезный bcz моей репутации