为什么我们需要grails中的显式关系?

为什么我们需要grails中的显式关系?,grails,gorm,grails-2.0,Grails,Gorm,Grails 2.0,我是GRAILS的初学者,所以我希望在我面临的问题上能得到一些帮助 我已经阅读了文档,但对于grails中的关系的概念仍然含糊不清。在grails中,域类之间可以有4种类型的关系 1比1 一对多 多对一 多对多 Grails有三种定义关系的结构 static hasMany = static belongsTo = static hasOne = 我的问题和困境是,为什么我们需要这三种结构来定义一种关系,而我们可以指定每个类都有哪些类型的对象来自动定义域类之间的关系 比如说 为了定义多对多

我是GRAILS的初学者,所以我希望在我面临的问题上能得到一些帮助

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

1比1 一对多 多对一 多对多

Grails有三种定义关系的结构

static hasMany =
static belongsTo = 
static hasOne = 
我的问题和困境是,为什么我们需要这三种结构来定义一种关系,而我们可以指定每个类都有哪些类型的对象来自动定义域类之间的关系

比如说

为了定义多对多,我可以用这种方式设计两个类

class Author{

   Set<Book> books

}


class Book{

  Set<Author> authors

}

如果有人能给我一个清晰易懂的解释,我将不胜感激。谢谢大家!

您在那里定义的所有内容都应该可以正常工作。你不必使用你提到的GORM提供的任何其他东西,但你可能有理由这么做。例如,您可以编写如下类:

class Author{
    Set<Book> books
}
当您使用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
    }
}
类作者{
订书
def addToBooks(b册){
增加(b)
这
}
def addToBooks(地图m){
书籍。添加(新书(m))
这
}
从书本中移除def(书本b){
书籍。删除(b)
这
}
}
这并不完全是生成的内容,但这是您可能关心的一些内容

它所代表的意义远不止这些。例如,如果这本书有一个对作者的引用,addToBooks方法将为您连接该引用

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

有关更多信息,请查看位于的GORM文档

class Author{
    Set<Book> books
}
class Author {
    static hasMany = [books: Book]
}
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
    }
}