我有一些奇怪的结果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'
}
}
答案 0 :(得分:1)
如果您将获取模式切换为lazy
,它将起作用。这是“max”的一种“已知”行为,与join / eager fetch模式相结合。见http://jira.grails.org/browse/GRAILS-5469