一尘不染

Hibernate,获取重复值

hibernate

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

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

不返回重复值。

谁能发现哪里出了问题?


阅读 229

收藏
2020-06-20

共1个答案

一尘不染

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

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

但这只是一个工作环境。

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

2020-06-20