【问题标题】:Why do we need explicit relationships in grails?为什么我们需要在 grails 中明确的关系?
【发布时间】:2014-06-20 02:32:30
【问题描述】:

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

}

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

【问题讨论】:

    标签: grails grails-orm grails-2.0


    【解决方案1】:

    您在此处定义的所有内容都应该可以正常工作。您不必使用您提到的 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 文档以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 2011-05-27
      • 1970-01-01
      • 2019-06-09
      • 2014-05-29
      • 2016-07-27
      • 1970-01-01
      • 2017-04-16
      • 2021-11-02
      相关资源
      最近更新 更多