JPA CriteriaBuilder – Come utilizzare l’operatore di confronto “IN”

Potete per favore aiutarmi come convertire i seguenti codici nell’utilizzo dell’operatore “in” del generatore di criteri? Devo filtrare usando lista / array di nomi utente usando “in”.

Ho anche provato a cercare usando 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 criteria = builder.createQuery(ScheduleRequest.class); Root scheduleRequest = criteria.from(ScheduleRequest.class); criteria = criteria.select(scheduleRequest); List params = new ArrayList(); List<ParameterExpression> usersIdsParamList = new ArrayList<ParameterExpression>(); for (int i = 0; i < usersList.size(); i++) { ParameterExpression 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 query = getJpaTemplate().getEntityManagerFactory().createEntityManager().createQuery(criteria); for (int i = 0; i < usersList.size(); i++) { query.setParameter(usersIdsParamList.get(i), usersList.get(i).getUsername()); } List scheduleRequestList = query.getResultList(); 

La stringa di query interna viene convertita in seguito, quindi non ottengo i record creati dai due utenti, perché sta utilizzando “AND”.

 select generatedAlias0 from ScheduleRequest as generatedAlias0 where ( generatedAlias0.createdBy=:param0 ) and ( generatedAlias0.createdBy=:param1 ) order by generatedAlias0.trackingId asc