Hibernate, bekommen doppelte Werte
-
09-10-2019 - |
Frage
Ich bin eine sehr einfache Abfrage zu schreiben, aber ich bin immer doppelte Werte aus irgendeinem Grunde.
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. 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
zurück keine doppelten Werte.
Kann mir jemand vor Ort, was falsch ist?
Lösung
Die schnelle workarround wäre ein Distinct Stammentität Ergebnis Transformator zu verwenden.
...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List unique = crit.List();
...
Das ist aber nur ein workarround.
ich ques das Problem zu Ihrem Mapping gehört. Wenn es uns, alle geladenen 1: n-Beziehung von ProcessInstance auf etwas anderes (nennen wir es X), und es gibt mehrere (n) X für ein ProcessInstance, die Sie mehrere ProcessInstance Artikel (n) in der Ergebnisliste für eine einzige bekommen ProcessInstance. -. Ist dies wirklich die Ursache, als der workarround nicht nur ein workarround ist, dann wäre es die Lösung sein
Andere Tipps
I encouter das gleiche Problem wie Sie ..
Dies ist, wie ich es lösen.
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end")).setProjection("id")
Mit dieser Einstellung werden alle kehrt die ID, die alle Kriterien erfüllen.
dort, nachdem Sie In
Einschränkungen verwenden und führen CriteriaSpecification.DISTINCT_ROOT_ENTITY
.
können Sie Ihr Ergebnis in den 2.en Kriterien blättern .. ich diese Hilfe hoffen.