У меня есть некоторые странные результаты 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'
}
}