我有以下自引用关系。一个用户可以有很多朋友。
class User {
String name
hasMany = [friends: User]
}
Hibernate 在我的 MySql 数据库中所做的是创建一个表 user_user。
现在我想将 Date lastUpdated 之类的属性添加到好友关系中。我怎样才能做到这一点?
我有以下自引用关系。一个用户可以有很多朋友。
class User {
String name
hasMany = [friends: User]
}
Hibernate 在我的 MySql 数据库中所做的是创建一个表 user_user。
现在我想将 Date lastUpdated 之类的属性添加到好友关系中。我怎样才能做到这一点?
我在这里可能不正确,但似乎不可能。原因是该user_user
表没有直接的域支持它,因为它只表示域之间的关系而不是域本身。
一种选择是在映射器类中管理关系,很像Spring Security Core PersonAuthority 类
class Friendship implements Serializable {
User user //may need some mappedBy config in User class
User friend
Date lastUpdated
... //helper methods, see PersonAuthority class for example
static mapping = {
id composite: ['user', 'friend']
version false
}
}
由于它是一个实际的域类,因此您可以包含其他属性,例如您的lastUpdated
.
更新评论: 您应该真正查看PersonAuthority 类的示例 - 您不需要在 User 类中显式声明任何关系,因为它们现在由 Friendship 管理。您可以在 User 类中添加辅助方法来查询 Friendship 中的关系。
例如:
class User ...
...
Set<User> getFriends() {
Friendship.findAllByUser(this).collect { it.friend } as Set
}
}