Hibernate, getting duplicate values

强颜欢笑 提交于 2019-12-19 03:12:08

问题


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?


回答1:


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.




回答2:


I encouter the same problem as you..

This is how I solve it.

Criteria cr = session.createCriteria(ProcessInstance.class, "p")
        .add(Restrictions.isNull("end")).setProjection("id")

this will returns all the ID that satisfy all your criteria.

there after you use In restrictions and perform CriteriaSpecification.DISTINCT_ROOT_ENTITY.

You will be able to scroll your result in 2nd criteria.. I hope this help.



来源:https://stackoverflow.com/questions/4645434/hibernate-getting-duplicate-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!