对Product
表进行了分页搜索。搜索会查看Product
个对象以及ProductParam
个对象。
问题是搜索结果中有重复的产品:每页有25个项目,三分之二是重复的产品。
如果在条件构建器中应用resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY,则每页的结果项数少于25个 - 大约为6个。
在这两种情况下,搜索都被破坏了。这个问题可以解决吗? (不完全重写代码。)
class Product {
String name
static hasMany = [ params: ProductParam ]
}
class ProductParam {
String key
String value
static belongsTo = [ product: Product ]
}
HibernateCriteriaBuilder criteriaBuilder = Product.createCriteria()
PagedResultList results = criteriaBuilder.list(max: 25, offset: offset) {
or {
// searching in Product
ilike 'name', "%${query}%"
// searching in ProductParam
createAlias('params', 'pp')
ilike 'pp.value', "%${query}%"
}
//resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY
}
Grails 2.2.0,Postgres
答案 0 :(得分:1)
您的代码看起来有点过于复杂:) 我会这样说的:
def results = Product.withCriteria{
projections{ distinct 'id' }
or{
eq 'name', "%${query}%" // do you really mean *eq* here, not *ilike*?
params{
ilike 'value', "%${query}%"
}
}
maxResults 25
firstResult offset
}