Grails中属性的自引用关系?

时间:2013-09-09 12:42:11

标签: mysql spring hibernate grails grails-2.0

我有以下自我引用关系。用户可以有很多朋友。

class User {

  String name

  hasMany = [friends: User]
}

Hibernate在我的MySql数据库中做的是创建一个表user_user。

现在我想在朋友关系中添加Date lastUpdated等属性。我怎么能这样做?

1 个答案:

答案 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
  }
}