findAllByPropertyInList приводит к неверному результату, связанному с JOIN или к спящему файлу? - PullRequest
1 голос
/ 23 августа 2011

У меня есть некоторые странные результаты findAllByPropertyInList () и думаю, это ошибка в Grails. Смотрите [1], результат не тот, который я ожидаю быть и что говорят другие запросы. Может быть, что-то вроде JOIN взрывает результат, чем max-свойство выполняется и после этого 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 Ответ

1 голос
/ 23 августа 2011

Если вы переключите режим выборки на lazy, он будет работать. Это своего рода «известное» поведение «max» в сочетании с режимом соединения / ожидания. Смотри http://jira.grails.org/browse/GRAILS-5469

...