在查看多对一表格时,正确地与标准分页(Grails)

时间:2014-02-19 16:17:11

标签: grails gorm

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

1 个答案:

答案 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
}