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

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() 返回重复值。 IE: *9,9,10,10,11,11 etc*

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

SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL

不返回重复值。

谁能发现怎么了?

有帮助吗?

解决方案

快速的工作环境是使用不同的根实体结果变压器。

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

但这只是一个解决工具。

我询问问题属于您的映射。如果从processIntance到其他事物有任何急切的加载1:n关系(称为x),并且有几(n)x用于一个processInstance,则您将在一个单一的结果列表中获得几个ProcessInstance项目(n) ProcessIntance。 - 如果这实际上是原因,那么工作圈不仅仅是一个工作圈,那么这将是解决方案。

其他提示

我与你相同的问题。

这就是我解决的方法。

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

这将返回所有满足您所有标准的ID。

使用后在那里 In 限制和执行 CriteriaSpecification.DISTINCT_ROOT_ENTITY.

您将能够以第二条标准滚动您的结果。.我希望这有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top