2011-01-10 25 views
6

Ich schreibe eine sehr einfache Abfrage, aber ich bekomme doppelte Werte aus irgendeinem Grund.Hibernate, doppelte Werte erhalten

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 
} 

Die pi.getId() gibt doppelte Werte zurück. dh: *9,9,10,10,11,11 etc*

Allerdings läuft diese Abfrage direkt in mysql

SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL 

kehrt nicht doppelte Werte.

Kann jemand feststellen, was falsch ist?

+0

ohne Ihre Zuordnung ist es schwer zu sagen. – Matt

Antwort

17

Das schnelle Workarround wäre die Verwendung eines Distinct Root Entity Result Transformer.

... 
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 
List unique = crit.List(); 
... 

Aber das ist nur ein Workarround.

Ich frage das Problem gehört zu Ihrem Mapping. Wenn es eine geladene 1: n-Beziehung von ProcessInstance zu etwas anderem gibt (nennen Sie es X), und es mehrere (n) X für eine ProcessInstance gibt, erhalten Sie mehrere ProcessInstance-Elemente (n) in der Ergebnisliste für eine einzelne Prozessinstanz. - Wenn das wirklich die Ursache ist, dann ist das Workarround nicht nur ein Workarround, sondern die Lösung.

+0

Ja das ist richtig. Wir haben das Mapping geändert, um eifrig zu werden. Danke –

+0

Das hat nicht geholfen. Wir bekommen immer noch Duplikate. Funktioniert der resultTransformer nur mit List()? Wir benutzen scroll. –

+0

Sie verstehen mich falsch: Das Problem kann auftreten, wenn die Beziehung abgerufen wird egger - ändern Sie es zu faul. – Ralph

2

ich encouter das gleiche Problem wie Sie ..

Dies ist, wie ich es lösen.

Dies gibt alle ID zurück, die alle Ihre Kriterien erfüllen.

dort nach In Einschränkungen und führen CriteriaSpecification.DISTINCT_ROOT_ENTITY.

Sie können Ihr Ergebnis in 2. Kriterien scrollen .. Ich hoffe, diese Hilfe.