Hibernate,获取重复值

时间:2011-01-10 09:47:25

标签: java hibernate criteria jbpm hibernate-criteria

我正在写一个非常简单的查询,但由于某种原因我得到重复的值。

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
}

pi.getId()会返回重复值。即:*9,9,10,10,11,11 etc*

但是,直接在mysql中运行此查询

SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL

不返回重复值。

有人能发现错误吗?

2 个答案:

答案 0 :(得分:17)

快速workarround将使用一个独特的根实体结果变换器。

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

但这只是一个问题。

我认为问题属于你的映射。如果从ProcessInstance到其他东西(称为X)有任何急切加载的1:n关系,并且一个ProcessInstance有几个(n)X,那么您将在结果列表中获得单个ProcessInstance项目(n) processInstance的。 - 如果这真的是原因,那么工作场所不仅仅是一个工作场所,那么它就是解决方案。

答案 1 :(得分:2)

我遇到了和你一样的问题..

这就是我解决它的方法。

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

这将返回满足所有条件的所有ID。

在您使用In限制并执行CriteriaSpecification.DISTINCT_ROOT_ENTITY之后

您可以在第二个标准中滚动您的结果..我希望这有帮助。