gpt4 book ai didi

grails - 为什么我们需要在 grails 中明确的关系?

转载 作者:行者123 更新时间:2023-12-02 14:23:58 26 4
gpt4 key购买 nike

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

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

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 方法将为您 Hook 该备份引用。

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

查看 http://grails.org/doc/latest/guide/GORM.html 上的 GORM 文档了解更多信息。

关于grails - 为什么我们需要在 grails 中明确的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com