我正在编写一个非常简单的查询,但是由于某种原因,我得到了重复的值。
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。 -如果确实是原因,那么工作解决方案不只是工作解决方案,那么它就是解决方案。