Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails中是否有任何方法可以获取整个记录?_Grails_Gorm - Fatal编程技术网

Grails中是否有任何方法可以获取整个记录?

Grails中是否有任何方法可以获取整个记录?,grails,gorm,Grails,Gorm,我试图找出在Grails中是否有任何方法可以急切地获取完整的记录,而不是左连接 我有两个具有一对多映射的类。当我尝试获取所有记录并以XML形式呈现时,只有“多”端的ID进入XML文件。有没有办法拿到所有的唱片 我使用的示例如下: 我有三门课: 用户、书籍和章节 用户和书籍有多对多映射,书籍到章节是一对多映射。我有一个类UserBook,它定义了多对多关系。现在我有以下代码 user = User.findByUserId(params.userid.toString()) def

我试图找出在Grails中是否有任何方法可以急切地获取完整的记录,而不是左连接

我有两个具有一对多映射的类。当我尝试获取所有记录并以XML形式呈现时,只有“多”端的ID进入XML文件。有没有办法拿到所有的唱片

我使用的示例如下:

我有三门课:

用户、书籍和章节

用户和书籍有多对多映射,书籍到章节是一对多映射。我有一个类UserBook,它定义了多对多关系。现在我有以下代码

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
}