Grails中是否有任何方法可以获取整个记录?
我试图找出在Grails中是否有任何方法可以急切地获取完整的记录,而不是左连接 我有两个具有一对多映射的类。当我尝试获取所有记录并以XML形式呈现时,只有“多”端的ID进入XML文件。有没有办法拿到所有的唱片 我使用的示例如下: 我有三门课: 用户、书籍和章节 用户和书籍有多对多映射,书籍到章节是一对多映射。我有一个类UserBook,它定义了多对多关系。现在我有以下代码Grails中是否有任何方法可以获取整个记录?,grails,gorm,Grails,Gorm,我试图找出在Grails中是否有任何方法可以急切地获取完整的记录,而不是左连接 我有两个具有一对多映射的类。当我尝试获取所有记录并以XML形式呈现时,只有“多”端的ID进入XML文件。有没有办法拿到所有的唱片 我使用的示例如下: 我有三门课: 用户、书籍和章节 用户和书籍有多对多映射,书籍到章节是一对多映射。我有一个类UserBook,它定义了多对多关系。现在我有以下代码 user = User.findByUserId(params.userid.toString()) def
user = User.findByUserId(params.userid.toString())
def books = user.getAllBooks()
render books as XML
Set<Book>getAllBooks() {
UserBook.findAllByUser(this).collect {it.book} as Set
}
user=user.findByUserId(params.userid.toString())
def books=user.getAllBooks()
将书籍呈现为XML
SetgetAllBooks(){
UserBook.findallbyser(this.collect{it.book}作为集合
}
上面呈现了一个包含书籍以及每本书的章节ID的XML。我想要的是上面的“书”也包含所有章节信息
谢谢 查看下面的链接。在域类中使用fetchMode完成:
static fetchMode = [things:"eager"]
但是,如果您只查找对象的ID来填充XML文件(或另一个字段),我会查看文档,以便在大型集合上获得更好的性能
Grails使用的默认获取策略是“lazy”,这意味着
集合将被延迟初始化。这可能导致n+1
如果你不小心就会有问题。如果您需要“热切”抓取,您可以
使用ORM DSL或指定作为查询一部分的即时抓取
您可以在域类中指定fetch策略,但IMHO,获得1-m关系的最佳策略是通过添加到域类或条件的方法在查询中使用fetch或join,例如:
// You have a Book with many Authors, then you specify the fetching strategy with eager
def results = Book.list(fetch:[authors:"eager"])
在其他情况下,您可以在Hibernate获取模式下使用条件:
import org.hibernate.FetchMode as FM
…
def results = c.list {
maxResults(10)
firstResult(50)
fetchMode("aRelationship", FM.JOIN)
}
或者,如果您知道HQL更好,那么您可以使用它,因为可以在HQL中指示获取,例如:def result=DomainClass.findAll(“HQL_语句”)
酷啊 如果您希望XML输出包含完整的章节信息,而不是仅包含ID,请尝试使用“deep”XML编组(对JSON也适用):
你能提供一个你的班级的例子,这样我们可以更好地回答你的问题吗?迈克尔,我已经按照你的建议提供了这个例子。谢谢
XML.use('deep') {
render books as XML
}