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