¿Me puede ayudar por favor a convertir los siguientes códigos para usar el operador "in" del generador de criterios? Necesito filtrar usando list/array de nombres de usuario usando "in".JPA CriteriaBuilder - Cómo utilizar el operador de comparación "IN"
También traté de buscar utilizando JPA CriteriaBuilder - método "in" pero no puedo encontrar un buen resultado. Así que realmente apreciaría también si me puede dar URL de referencia para este tema. Gracias.
Aquí es mis códigos:
//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();
La cadena de consulta interna se convierte a continuación, por lo que no reciben los registros creados por los dos usuarios, porque está utilizando "Y".
select generatedAlias0 from ScheduleRequest as generatedAlias0 where (generatedAlias0.createdBy=:param0) and (generatedAlias0.createdBy=:param1) order by generatedAlias0.trackingId asc
Hola perissf, gracias por tu respuesta. ¿Puedo preguntar, por favor, qué es "ScheduleRequest_"? ¿Cómo lo creo? – Jemru
Es una clase Metamodel autogenerada por su proveedor JPA. Si está utilizando Hibernate, consulte este enlace http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/ – perissf
Leyendo mi pseudocódigo Veo una posible discrepancia de tipo. ¿Se está uniendo con userNames (String) o userIds (Integer/Long)? Por favor, hágamelo saber para que pueda actualizar mi respuesta – perissf