Hibernate, ottenendo valori duplicati
-
09-10-2019 - |
Domanda
Sto scrivendo una semplice query, ma io sono sempre i valori duplicati per qualche motivo.
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end"));
@Cleanup ScrollableResults sr = cr.scroll(ScrollMode.FORWARD_ONLY);
while (sr.next()) {
pi = (ProcessInstance) sr.get(0);
String id = pi.getId(); //Getting duplicate values
}
Il pi.getId()
restituisce valori duplicati. vale a dire: *9,9,10,10,11,11 etc*
Tuttavia, l'esecuzione questa query direttamente in mysql
SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL
Non restituire i valori duplicati.
chiunque spot può che cosa è sbagliato?
Soluzione
Il workarround veloce sarebbe quella di utilizzare un distinto Root Entità Risultato Transformer.
...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List unique = crit.List();
...
Ma questo è solo un workarround.
I ques il problema appartiene al vostro mappatura. Se c'è qualche ansioso caricato 1: n relazione da ProcessInstance a qualcos'altro (lo chiamano X), e ci sono diversi (n) X per una ProcessInstance, la si otterrà diversi elementi processInstance (n) nella lista dei risultati per un singolo ProcessInstance. -. Se questa è davvero la causa, che il workarround non è solo un workarround, allora sarebbe la soluzione
Altri suggerimenti
I encouter lo stesso problema come voi ..
Ecco come ho risolto.
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end")).setProjection("id")
Questo restituisce tutta l'ID che soddisfano tutti i criteri.
ci dopo aver utilizzato restrizioni In
e di eseguire CriteriaSpecification.DISTINCT_ROOT_ENTITY
.
Si sarà in grado di scorrere il risultato in 2 ° criteri .. Spero che questo aiuto.