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

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

不返回重复值。

谁能发现什么地方不对?

最佳答案

快速的解决方法是使用“不同的根实体结果转换器”。

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

但这仅是一种解决方法。

我怀疑问题属于您的映射。如果从ProcessInstance到其他对象有急切的1:n关系加载(称为X),并且一个ProcessInstance有多个(n)X,则您将在单个结果列表中获得多个ProcessInstance项目(n) ProcessInstance。 -如果确实是原因,那么工作解决方案不只是工作解决方案,那么它就是解决方案。

09-11 19:48