Grails已多次搜索hasmany

时间:2016-04-01 15:10:31

标签: database grails gorm

我有两个GORM域类。一张是卡,卡上有许多购物。有什么方法可以搜索大于或等于某些购买的卡片。这可能是一个例子

我们有4张卡:

卡片1:橙色,橙色,苹果 Card2:苹果,橘子 卡3:橙色,橙色 Card4:苹果,苹果,橙色

让我们说我想搜索所有有2个或更多橙子的牌。这样只返回卡1,3。根据购买名称进行搜索。

1 个答案:

答案 0 :(得分:0)

假设您的域类是这样的......

class Card {
    static hasMany = [purchases: Purchase]
}

class Purchase {
    String name
}

以下是如何做到的:

def cards = Card.withCriteria {
    resultTransformer = org.hibernate.Criteria.DISTINCT_ROOT_ENTITY 

    sizeGe('purchases', 2)

    purchases {
        eq('name', 'orange')
    }
}

您可以使用sizeGe()来计算集合中的项目数,而不是使用子查询,并查找大于或等于提供的数量的计数。

但是,在查询中添加eq()会导致结果包含由于分组而产生的重复项。子查询不会产生副作用。因此,DISTICT_ROOT_ENTITY结果转换器会在事后过滤掉重复项

您可以从我的文章here了解有关条件查询的详情。