我在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 }
是否有更有效的方法来查询此数据?
答案 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/