我正在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 }

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

最佳答案

有人问了一个类似的问题here,正如答案中指出的那样,似乎Hibernate不支持对诸如枚举之类的值类型集合的条件查询。一种选择是改为使用hql查询:

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

10-04 19:16