0

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

class User {

  String name

  hasMany = [friends: User]
}

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

现在我想将 Date lastUpdated 之类的属性添加到好友关系中。我怎样才能做到这一点?

4

1 回答 1

0

我在这里可能不正确,但似乎不可能。原因是该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
  }
}
于 2013-09-09T15:55:56.920 回答