我有以下自我引用关系。用户可以有很多朋友。
class User {
String name
hasMany = [friends: User]
}
Hibernate在我的MySql数据库中做的是创建一个表user_user。
现在我想在朋友关系中添加Date lastUpdated等属性。我怎么能这样做?
答案 0 :(得分:0)
我可能在这里不正确,但看起来似乎不可能。原因是user_user
表没有直接域支持它,因为它只表示域之间的关系而不是域本身。
一种选择是在mapper类中管理关系,就像Spring Security Core PersonAuthority class
一样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 class示例 - 您不需要在User类中明确声明任何关系,因为它们现在由Friendship管理。您可以在User类中添加辅助方法,以查询友谊关系。
例如:
class User ...
...
Set<User> getFriends() {
Friendship.findAllByUser(this).collect { it.friend } as Set
}
}