Критерии API IN с ArrayList

Могут ли критерии использовать List в выражении "IN"?

Например:

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

Я хочу найти все идентификаторы с 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"));

Как использовать список вместо этого?

2 ответа

Решение

Это будет работать, используя только идентификаторы в качестве параметра в методе ín


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

Вы можете использовать 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(parentPredicate);
Другие вопросы по тегам