我在使用Grails,我想要有一個單向的多對多關係。Grails在同一張表上的多對多關係
在我的應用程序中,員工可以「書籤」另一個員工以便快速訪問他們以留下筆記。員工不需要知道誰已爲他們添加書籤。
換句話說,我基本上想要一個employee.bookmarks
屬性,我可以使用這個。
到目前爲止,我已經找到了Grails ORM的documentation on many-to-many relationships,但是這似乎是跨越兩個不同的表。
我在使用Grails,我想要有一個單向的多對多關係。Grails在同一張表上的多對多關係
在我的應用程序中,員工可以「書籤」另一個員工以便快速訪問他們以留下筆記。員工不需要知道誰已爲他們添加書籤。
換句話說,我基本上想要一個employee.bookmarks
屬性,我可以使用這個。
到目前爲止,我已經找到了Grails ORM的documentation on many-to-many relationships,但是這似乎是跨越兩個不同的表。
聽起來像是你只需要一個普通的單向一對多:
class Employee {
...
static hasMany = [bookmarks: Employee]
}
根據你的意思我認爲你想要做的就是使用Employee.bookmarks來存儲被書籤的員工的數據庫ID。通過這樣做,您可以使用列表功能獲取員工列表?你有沒有這樣做的理由,你不想做兩個班?
您可以使用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。
這是否允許多名員工爲同一員工添加書籤?即'employeeA'和'employeeB'都有'employeeC'的書籤。 – 2011-03-25 01:45:48
是的 - 此模型創建一個連接表來存儲相關用戶,所以對多個引用沒有限制。 – 2011-03-25 05:17:06