在Grails中查询与枚举集合的关联

时间:2012-03-26 09:14:36

标签: grails hql gorm criteria

我在Grails 1.2.1中尝试查询,按租户类型查找所有产品。

我的解决方案有效但效率很低,首先我检索所有产品,然后查找给定租户的所有匹配结果。

我在JIRA中发现了一个相关的错误:Enum as collection

class Product {
    Set<TenantType> tenants
    static hasMany = [tenants: TenantType]
}

enum TenantType {
    BICYCLE,
    MOTORCYCLE
}

def tenant = TenantType.BICYCLE
Product.list().findAll { product -> tenant in product.tenants }

是否有更有效的方法来查询此数据?

3 个答案:

答案 0 :(得分:3)

类似的问题被问到here,正如答案中所指出的,看起来Hibernate不支持对值类型集合(如枚举)的条件查询。一种选择是使用hql查询:

Product.executeQuery('from Product p inner join p.tenants tenants
                      where tenants = :tenant', [tenant: TenantType.BICYCLE])

答案 1 :(得分:0)

无需加入即可执行:

Product.executeQuery('from Product where :tenant in elements(tenants)', [tenant: TenantType.BICYCLE])

答案 2 :(得分:0)

在Product类中使用类似

的命名查询
findByTenantType { tenantType->
        tenants{ eq 'value', tenantType}

    }

然后像这样访问这个命名查询 -

def product = Product .findByTenantType(TenantType.BICYCLE).get()

查看类似的博客 - http://www.grailsbrains.com/search-parent-through-child-in-aggregation-relationship/