Не могли бы вы помочь мне в преобразовании следующих кодов в использование оператора «in» строителя критериев? Мне нужно фильтровать, используя список/массив имен пользователей, используя «in».JPA CriteriaBuilder - Как использовать оператор сравнения «IN»
Я также попытался выполнить поиск с использованием метода JPA CriteriaBuilder - «in», но не смог найти хороший результат. Так что я был бы очень признателен, если бы вы могли дать мне ссылки на эту тему. Благодарю.
Вот мои коды:
//usersList is a list of User that I need to put inside IN operator
CriteriaBuilder builder = getJpaTemplate().getEntityManagerFactory().getCriteriaBuilder();
CriteriaQuery<ScheduleRequest> criteria = builder.createQuery(ScheduleRequest.class);
Root<ScheduleRequest> scheduleRequest = criteria.from(ScheduleRequest.class);
criteria = criteria.select(scheduleRequest);
List<Predicate> params = new ArrayList<Predicate>();
List<ParameterExpression<String>> usersIdsParamList = new ArrayList<ParameterExpression<String>>();
for (int i = 0; i < usersList.size(); i++) {
ParameterExpression<String> usersIdsParam = builder.parameter(String.class);
params.add(builder.equal(scheduleRequest.get("createdBy"), usersIdsParam));
usersIdsParamList.add(usersIdsParam);
}
criteria = criteria.where(params.toArray(new Predicate[0]));
TypedQuery<ScheduleRequest> query = getJpaTemplate().getEntityManagerFactory().createEntityManager().createQuery(criteria);
for (int i = 0; i < usersList.size(); i++) {
query.setParameter(usersIdsParamList.get(i), usersList.get(i).getUsername());
}
List<ScheduleRequest> scheduleRequestList = query.getResultList();
Внутренний Строка запроса преобразуется ниже, так что я не получаю записи, созданные двумя пользователями, так как он использует «И».
select generatedAlias0 from ScheduleRequest as generatedAlias0 where (generatedAlias0.createdBy=:param0) and (generatedAlias0.createdBy=:param1) order by generatedAlias0.trackingId asc
Привет, perissf, спасибо за ваш ответ. Могу ли я спросить, что такое «ScheduleRequest_»? Как мне его создать? – Jemru
Это класс метамодели, автоматически созданный вашим провайдером JPA. Если вы используете Hibernate, посмотрите эту ссылку http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/ – perissf
Чтение моего псевдокода. Я вижу возможное несоответствие типа. Вы присоединяетесь к userNames (String) или userIds (Integer/Long)? Pls дайте мне знать, чтобы я мог обновить свой ответ – perissf