Grails跨同一个表建立多对多关系

Grails跨同一个表建立多对多关系,grails,groovy,many-to-many,gorm,Grails,Groovy,Many To Many,Gorm,我正在使用Grails,我希望有一个单向的多对多关系 在我的应用程序中,一名员工可以将另一名员工“添加书签”,以便快速访问他们以留下笔记。员工不需要知道谁给他们添加了书签 换句话说,我本质上想要一个employee.bookmarks属性,我可以使用它 到目前为止,我已经找到了Grails ORM的解决方案,但这似乎只适用于两个不同的表。听起来您只需要一个常规的单向1-many: class Employee { ... static hasMany = [bookmarks: Em

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

在我的应用程序中,一名员工可以将另一名员工“添加书签”,以便快速访问他们以留下笔记。员工不需要知道谁给他们添加了书签

换句话说,我本质上想要一个
employee.bookmarks
属性,我可以使用它


到目前为止,我已经找到了Grails ORM的解决方案,但这似乎只适用于两个不同的表。

听起来您只需要一个常规的单向1-many:

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

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

class Employee {
   ...
   static hasMany = [bookmarks: Employee]
}
您可以使用和一个附加表“书签”来执行此任务:

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”存储员工之间的关系,因此可以让两个人为同一个员工添加书签。请注意,类Bookmark必须实现可序列化。

您可以使用和一个附加表“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”存储员工之间的关系,因此可以让两个人为同一个员工添加书签。请注意,类Bookmark必须实现可序列化。

这是否允许多个员工为同一员工添加书签?i、 e.
employeeA
employeeB
都已为
employeeC
添加了书签。是-此模型创建了一个连接表来存储相关用户,因此对多个引用没有限制。这是否允许多个员工为同一员工添加书签?i、 e.
employeeA
employeeB
都已将
employeeC
设置为书签。是-此模型创建一个联接表来存储相关用户,因此对多个引用没有限制。