条件 API IN 与 ArrayList
Criteria API IN with ArrayList
Criteria 可以在 "IN" 表达式中使用 List 吗?
例如:
List<Long> ids = new ArrayList<>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
我想找到所有 id 为 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"));
如何使用 List 而不是这个?
你可以用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 );
这将有效,仅使用 id 作为“í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));
Criteria 可以在 "IN" 表达式中使用 List 吗?
例如:
List<Long> ids = new ArrayList<>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
我想找到所有 id 为 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"));
如何使用 List 而不是这个?
你可以用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 );
这将有效,仅使用 id 作为“í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));