繁体   English   中英

Grails GORM域类关系

[英]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']])

在这一本书中,我可以管理发布者的价值。

问题:如果出版商有hasmanyDomain相关问题,那本书我能够阅读属性吗?

谢谢。 谢谢。

默认情况下,懒惰获取与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM