为什么我们需要明确的关系?

用户名

我是GRAILS的初学者,因此希望能对我面临的问题有所帮助。

我已经阅读了文档,但是对于grails中的关系这个概念我仍然含糊不清。在grails中,域类之间可能有4种关系类型。

1对1 1对多对1对多对多

Grails具有三种定义关系的结构

static hasMany =
static belongsTo = 
static hasOne = 

我的问题和难题是,当我们只需指定每个类具有哪种对象类型并自动定义域类之间的关系时,为什么需要使用这三种构造来定义关系。

例如

要定义很多对很多,我可以用这种方法设计两个类

class Author{

   Set<Book> books

}


class Book{

  Set<Author> authors

}

对于1对多对多对1

class Author{

  Set<Book> books

}


class Book{

  String title

}

一对一

class Author{

  Book book

}


class Book{

  Author author

}

如果有人可以给我一个清晰,易于理解的解释,我将不胜感激。谢谢!

杰夫·斯科特·布朗

您在此处定义的所有内容都可以正常运行。您不必使用您提到的GORM提供的其他任何东西,但是有一些您可能想要的原因。例如,您可以编写这样的类:

class Author{
    Set<Book> books
}

与此不同:

class Author {
    static hasMany = [books: Book]
}

当您使用hasMany时,Grails会为您生成此代码...

class Author {
    Set<Book> books

    def addToBooks(Book b) {
        books.add(b)
        this
    }

    def addToBooks(Map m) {
        books.add(new Book(m))
        this
    }

    def removeFromBooks(Book b) {
        books.remove(b)
        this
    }
}

那不是生成的确切内容,而是您可能会关心的一些东西。

它所代表的不仅仅是它。例如,如果Book具有对Author的引用,则addToBooks方法将为您挂钩该引用。

您提到的其他属性还有其他行为。例如,该hasOne属性切换外键在持久性模型上指向的方向。belongsTo属性强制某些事件的级联。等等

有关更多信息,请参阅http://grails.org/doc/latest/guide/GORM.html上的GORM文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

为什么我们需要使用flatMap?

来自分类Dev

为什么我们需要虚拟内存?

来自分类Dev

mongodb为什么我们需要getSisterDB

来自分类Dev

为什么我们需要框架来做依赖关系解析器?

来自分类Dev

为什么我们需要把*用作指针

来自分类Dev

为什么我们需要分别编译和链接?

来自分类Dev

为什么我们需要* .lib文件?

来自分类Dev

为什么我们需要adsense来注册admob

来自分类Dev

为什么我们需要创建CFC的实例?

来自分类Dev

为什么我们需要数据仓库?

来自分类Dev

为什么我们需要request.getSession(true)?

来自分类Dev

为什么我们需要GUID的规范格式?

来自分类Dev

为什么我们需要使用AsEnumerable()方法?

来自分类Dev

为什么我们需要隐式应用

来自分类Dev

为什么我们需要gevent.queue?

来自分类Dev

为什么我们完全需要表之间的“关系”?

来自分类Dev

为什么我们需要Fuseki服务器?

来自分类Dev

为什么我们需要Python中的属性?

来自分类Dev

为什么我们需要MapReduce中的“地图”部分?

来自分类Dev

为什么我们需要Clojure中的'in(require'[...]])?

来自分类Dev

Firebase:为什么我们需要bindTo方法?

来自分类Dev

为什么我们通常需要flatMap?

来自分类Dev

我们为什么需要容器?

来自分类Dev

为什么我们需要排除依赖关系才能使Android JUNIT测试正常工作?

来自分类Dev

为什么我们在MongoDB中需要created_at

来自分类Dev

为什么我们需要Avro模式演变

来自分类Dev

为什么我们需要在Linux上挂载?

来自分类Dev

什么是BIOS,为什么我们需要它?

来自分类Dev

为什么我们需要IO?