Potete aiutarmi come convertire i seguenti codici nell'utilizzo dell'operatore "in" del generatore di criteri? Ho bisogno di filtrare usando lista/array di nomi utente usando "in".JPA CriteriaBuilder - Come utilizzare l'operatore di confronto "IN"
Ho anche provato a cercare utilizzando JPA CriteriaBuilder - metodo "in" ma non riesco a trovare un buon risultato. Quindi mi piacerebbe davvero anche se mi puoi dare URL di riferimento per questo argomento. Grazie.
Ecco i miei codici:
//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();
The String interno query viene convertita al di sotto, quindi non si ottiene il record creati dai due utenti, perché sta usando "AND".
select generatedAlias0 from ScheduleRequest as generatedAlias0 where (generatedAlias0.createdBy=:param0) and (generatedAlias0.createdBy=:param1) order by generatedAlias0.trackingId asc
Ciao perissf, grazie per la tua risposta. Posso chiederlo per favore, che cos'è "ScheduleRequest_"? Come lo creo? – Jemru
È una classe Metamodel generata automaticamente dal tuo provider JPA. Se stai usando Hibernate, controlla questo link http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/ – perissf
Leggendo il mio pseudo-codice, vedo una possibile discrepanza di tipo. Ti unisci a userNames (String) o userIds (Integer/Long)? Pls fammi sapere in modo che possa aggiornare la mia risposta – perissf