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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top