2011-03-24 95 views
0

我在使用Grails,我想要有一個單向的多對多關係。Grails在同一張表上的多對多關係

在我的應用程序中,員工可以「書籤」另一個員工以便快速訪問他們以留下筆記。員工不需要知道誰已爲他們添加書籤。

換句話說,我基本上想要一個employee.bookmarks屬性,我可以使用這個。

到目前爲止,我已經找到了Grails ORM的documentation on many-to-many relationships,但是這似乎是跨越兩個不同的表。

回答

6

聽起來像是你只需要一個普通的單向一對多:

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

這是否允許多名員工爲同一員工添加書籤?即'employeeA'和'employeeB'都有'employeeC'的書籤。 – 2011-03-25 01:45:48

+0

是的 - 此模型創建一個連接表來存儲相關用戶,所以對多個引用沒有限制。 – 2011-03-25 05:17:06

-1

根據你的意思我認爲你想要做的就是使用Employee.bookmarks來存儲被書籤的員工的數據庫ID。通過這樣做,您可以使用列表功能獲取員工列表?你有沒有這樣做的理由,你不想做兩個班?

0

您可以使用transient properties和一個額外的表「書籤」做這個任務:

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。