findAllByPropertyInList导致错误的结果,JOIN相关或休眠Distinct / paging问题?

时间:2011-08-23 08:14:25

标签: mysql hibernate grails distinct

我有一些奇怪的结果findAllByPropertyInList()和思考 这是grails中的一个错误。见[1],结果不是我所期望的 是和其他问题说的。 可能是因为某种JOIN炸毁了结果,而不是 执行max-property,然后DISTINCT减少数量 结果再次?

或者这与Hibernate无法在一个查询中使用DISTINCT和分页属性有关吗?

塞巴斯蒂安

[1]

def criteria = Foo.createCriteria()
def results = criteria.listDistinct() {
 ...
}
results.id.unique().size()
==>34
results.topic.unique().size() // some of the topics are duplicate
==>25
def more = Foo.findAll([max:20, offset:0]).size()
==>20
def more = Foo.getAll(results.id).size()
==>34
def more = Foo.findAllByTopicInList(results.topic, [max:20, offset:0]).size()
==> 7  // expected 25
def more = Foo.findAllByIdInList(results.id, [max:20, offset:0]).size()
==> 7  // expected 34

class Foo {
  String topic
  SubCategory subCategory
  List<Article> articles
  WritingStyle writingStyle
  SortedSet<Keyword> keywords = []as SortedSet
  SortedSet<String> linkTexts = []as SortedSet
  ArticleType articleType = ArticleType.FreestyleArticle

  static belongsTo = [project: Project]
  static hasMany = [articles:Article, keywords: Keyword, linkTexts: String]

  static constraints = {
    topic(blank: false, size: 1..200)
    subCategory(nullable: false)
    writingStyle(nullable: true)
    articles nullable:true
  }

  static mapping = {
    writingStyle fetch: 'join'
    subCategory fetch: 'join'
    keywords cascade: 'all-delete-orphan'
    keywords fetch: 'join'
    linkTexts cascade: 'all-delete-orphan'
  }
}

1 个答案:

答案 0 :(得分:1)

如果您将获取模式切换为lazy,它将起作用。这是“max”的一种“已知”行为,与join / eager fetch模式相结合。见http://jira.grails.org/browse/GRAILS-5469