我在使用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