[英]Grails GORM Domain class relationship
Grails 1.1.1 Goovy 1.5.7
在这样的关系中:
作者1-n图书n-1出版商
在Grails中定义:
class Author {
String firstName
String lastName
static hasMany = [books: Book]
static constraints = {
books(nullable: true)
}
}
class Book {
String title
Author author
Publisher publisher
static constraints = {
author(nullable: true)
publisher(nullable: true)
}
}
class Publisher {
String name
static hasMany = [books: Book]
static constraints = {
books(nullable: true)
}
}
我想用出版商和作者的值加载一本书。 当我查询到一本书时:
def book2 = Book.findAllByAuthor(author)
我得到了与助理关联的响应,但发布者在另一个查询中仅具有id和name类:
def book3 = Book.findAllByPublisher(publisher)
我得到相反的结果,我有带出版商数据的书,但作者只有ID和类名。
定义的模型中的错误在哪里? o查询方式有误吗?
编辑:
我需要这样的方式仅使用查询来检索值:
def book2 = Book.findAllByAuthor(author, [fetch:[publisher:'eager']])
在这一本书中,我可以管理发布者的价值。
问题:如果出版商有hasmany
或Domain
相关问题,那本书我能够阅读属性吗?
谢谢。 谢谢。
默认情况下,懒惰获取与gorm关联一起使用。 如果要启用急切获取,可以通过将以下映射块添加到Author域类来修改ORM DSL:
static mapping = {
books lazy:false
}
或者您可以在定义图书关系之后通过添加以下代码来更改域对象中的提取模式。
static fetchMode = [books:"eager"]
对您的Publisher域对象执行相同操作将使您能够完成所需的工作。 您确实要注意可能会加载比预期更多的数据的后果。
get()方法是否应该返回您要查找的内容? 示例:def book2 = Book.get(作者)
您最好使用Criteria并明确定义应该急切加载的关系。 只需在查询中提及关系即可。
例:
def c = Teacher.createCriteria()
List<Teacher> results = c.list {
subjects {
attendees {}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.