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

时间:2014-06-19 17:42:53

标签: grails gorm grails-2.0

我是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

}

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

1 个答案:

答案 0 :(得分:3)

你在那里定义的一切应该可以正常工作。您不必使用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有一个返回作者的引用,addToBooks方法将为你勾选该引用。

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

请查看http://grails.org/doc/latest/guide/GORM.html处的GORM文档以获取更多信息。