Критерии 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);