Grails在同一个表中的多对多关系

时间:2011-03-24 21:05:08

标签: grails groovy many-to-many gorm

我正在使用Grails,我希望有一种单向的多对多关系。

在我的应用程序中,员工可以“标记”另一个员工,以便快速访问它们以留下备注。员工无需知道谁为他们添加了书签。

换句话说,我基本上希望拥有一个employee.bookmarks属性,我可以用它。

到目前为止,我已经找到了Grails ORM的documentation on many-to-many relationships,但这似乎只是在两个不同的表中。

2 个答案:

答案 0 :(得分:6)

听起来你只需要一个普通的单向1-many:

class Employee {
   ...
   static hasMany = [bookmarks: Employee]
}

答案 1 :(得分:0)

您可以使用transient properties和附加表“Bookmark”来执行此任务:

class Employee {

    String name
    static transients = ["bookmarks"]

    def getBookmarks() {
        Bookmark.findAllByBookmarker(this, [sort: "id", order: "asc"])
    }
    ...
}

class Bookmark implements Serializable {

  Employee bookmarker // the employee who bookmark someone
  Employee bookmarkee // the employee who is bookmarked

  static mapping = {
    table "Bookmark"
    id composite: ['bookmarker', 'bookmarkee']
    bookmarker(column: "BOOKMARKER_ID")
    bookmarkee(column: "BOOKMARKEE_ID")
    version false
  }

    static Bookmarker get(long bookmarkerId, long bookmarkeeId) {
        find 'from Bookmark where bookmarker.id=:bookmarkerId and bookmarkee.id=:bookmarkeeId',
            [bookmarkerId: bookmarkerId, bookmarkeeId: bookmarkeeId]
    }
    ...
}

此方法使用表“Bookmark”来存储员工之间的关系,因此可以让2个人为同一个员工添加书签。请注意,Bookmark类必须实现Serializable。