Grails条件查询重建重复实例

时间:2011-10-19 12:26:54

标签: grails criteria

我有一个名为Order的域类,该类与hasMany类有Item个关系。 当我查询具有特定限制的订单列表时,我得到的Order实例与items一样多。

因此,例如,Order实例已对{3}的3个实例进行了引用,然后Item上的条件调用将返回3个Order的重复实例。我不确定,但是如果值得一提的是,域类Order已将Order设置为fetchMode

我对那里发生的事情感到很困惑。在这方面的任何帮助将不胜感激。附上一小段代码:

"eager"

再次感谢

4 个答案:

答案 0 :(得分:4)

如果您拨打criteria.listDistinct而不是criteria.list,则会删除重复项

答案 1 :(得分:3)

一种解决方案是在查询中使用它:

resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY

答案 2 :(得分:2)

Criteria API只是构建SQL查询的包装器。在您的情况下,有问题的查询中包含JOIN(由于急切的提取),并返回Orders的笛卡尔积和它们的匹配项。返回的每一行都作为单独的Order实例包含在结果中。

删除重复项的最简单方法是将所有结果放入Set中,如下所示:

def resultSet = new HashSet()
resultSet.addAll(results)
println("results == " + resultSet)

答案 3 :(得分:0)

您也可以使用动态查找程序,如Order.findAllBy *。根据您的过滤器的复杂程度,这可能很容易或很难:)