如果我使用动态查找器加载域类列表,例如
List<Book> books = Book.findAllByPublicationYear(2013)
我的理解是书籍列表将被延迟加载,这样如果我然后迭代它们
books.each { println "$it.title" }
我将执行 N + 1 个查询。有没有办法让动态查找器急切地加载书籍列表(不使用 HQL 或条件重写查询)?
如果我使用动态查找器加载域类列表,例如
List<Book> books = Book.findAllByPublicationYear(2013)
我的理解是书籍列表将被延迟加载,这样如果我然后迭代它们
books.each { println "$it.title" }
我将执行 N + 1 个查询。有没有办法让动态查找器急切地加载书籍列表(不使用 HQL 或条件重写查询)?
动态查找器总是急切地获取域的(非关联)成员。例如,如果您publicationYear
是其中的一员,Book
您将始终运行一个查询来获取所有与plublicationYear
. 我的查询看起来像
select this_.id as id0_0_, this_.version as version0_0_,
this_.name as name0_0_,this_.publication_year as publicat4_0_0_
from book this_
where this_.publication_year=?
Book
如果您在say ( )中有关联,Author
您可以在域类中以编程方式说明您是否想要fetch
关联eagerly
或lazily
使用此映射:(默认为惰性)
static mapping = {
author lazy: false //or authors if you have multiple authors for a Book
}
或者
static fetchMode = [author: 'eager']