我正在使用Grails,我希望有一种单向的多对多关系。
在我的应用程序中,员工可以“标记”另一个员工,以便快速访问它们以留下备注。员工无需知道谁为他们添加了书签。
换句话说,我基本上希望拥有一个employee.bookmarks
属性,我可以用它。
到目前为止,我已经找到了Grails ORM的documentation on many-to-many relationships,但这似乎只是在两个不同的表中。
答案 0 :(得分:6)
听起来你只需要一个普通的单向1-many:
class Employee {
...
static hasMany = [bookmarks: Employee]
}
答案 1 :(得分:0)
您可以使用transient properties和附加表“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”来存储员工之间的关系,因此可以让2个人为同一个员工添加书签。请注意,Bookmark类必须实现Serializable。