我是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] 删除。
我来说两句