繁体   English   中英

在同一张桌子上造成多对多关系

[英]Grails many-to-many relationship across the same table

我正在使用Grails,我想建立一个单向的多对多关系。

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

换句话说,我本质上想拥有一个employee.bookmarks属性,可以用于此目的。

到目前为止,我已经找到了有关 Grails ORM 的多对多关系文档 ,但这似乎完全是在两个不同的表之间。

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

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]
    }
    ...
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM