我正在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])