I am writing a very simple query, but I am getting duplicate values for some reason.
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
}
The pi.getId()
returns duplicate values. ie: *9,9,10,10,11,11 etc*
However, running this query directly in mysql
SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL
Does not return duplicate values.
Can anyone spot what is wrong?
The fast workarround would be to use a Distinct Root Entity Result Transformer.
...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List unique = crit.List();
...
But this is only a workarround.
I ques the problem belongs to your mapping. If there is any eager loaded 1:n relationship from ProcessInstance to something else (call it X), and there are several (n) X for one ProcessInstance, the you will get several ProcessInstance items (n) in the result list for a single ProcessInstance. -- If this is realy the cause, than the workarround is not just a workarround, then it would be the solution.