EnzyWeiss
EnzyWeiss

Reputation: 198

Criteria API IN with ArrayList

Can Criteria use List in "IN" expression?

For example:

List<Long> ids = new ArrayList<>();
        ids.add(1L);
        ids.add(2L);
        ids.add(3L);

I want to find all id with 1, 2, 3

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    CriteriaQuery<User> userQuery = criteriaBuilder.createQuery(User.class);
    Root<User> userRoot = userQuery.from(User.class);
    userQuery.select(userRoot);
    userQuery.where(userRoot.get("id").in("1","2","3"));

How to use List instead of this?

Upvotes: 2

Views: 7767

Answers (2)

Golam Mazid Sajib
Golam Mazid Sajib

Reputation: 9457

U can use Predicate

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<User> userQuery = criteriaBuilder.createQuery(User.class);
Root<User> userRoot = userQuery.from(User.class);
Expression<String> userExpression = userRoot.get("id");
Predicate userPredicate = userExpression.in(ids);
userQuery.where(userPredicate );

Upvotes: 1

Vaibhav Singh
Vaibhav Singh

Reputation: 187

This will work, using only ids as parameter in 'ín' method


List<Long> ids = new ArrayList<>();
    ids.add(1L);
    ids.add(2L);
    ids.add(3L);
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    CriteriaQuery<User> userQuery = criteriaBuilder.createQuery(User.class);
    Root<User> userRoot = userQuery.from(User.class);
    userQuery.select(userRoot);
    userQuery.where(userRoot.get("id").in(ids));

Upvotes: 7

Related Questions