我有一个名为Order
的域类,该类与hasMany
类有Item
个关系。
当我查询具有特定限制的订单列表时,我得到的Order
实例与items
一样多。
因此,例如,Order
实例已对{3}的3个实例进行了引用,然后Item
上的条件调用将返回3个Order
的重复实例。我不确定,但是如果值得一提的是,域类Order
已将Order
设置为fetchMode
。
我对那里发生的事情感到很困惑。在这方面的任何帮助将不胜感激。附上一小段代码:
"eager"
再次感谢
答案 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 *。根据您的过滤器的复杂程度,这可能很容易或很难:)