簡體   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