私は次の自己参照関係を持っています。ユーザーは多くの友達を持つことができます。
class User {
String name
hasMany = [friends: User]
}
MySql データベースで Hibernate が行うことは、テーブル user_user を作成することです。
ここで、Date lastUpdated のようなプロパティを友人関係に追加したいと考えています。どうやってやるの?
私は次の自己参照関係を持っています。ユーザーは多くの友達を持つことができます。
class User {
String name
hasMany = [friends: User]
}
MySql データベースで Hibernate が行うことは、テーブル user_user を作成することです。
ここで、Date lastUpdated のようなプロパティを友人関係に追加したいと考えています。どうやってやるの?
私はここで間違っているかもしれませんが、それは不可能のようです。その理由は、user_user
テーブルがドメイン自体ではなくドメイン間の関係のみを表しているため、表にそれを裏付ける直接的なドメインがないからです。
1 つのオプションは、 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 クラスを 実際に確認する必要があります。ユーザー クラスでリレーションシップを明示的に宣言する必要はありません。これは、Friendship によって管理されるようになったためです。ユーザー クラスにヘルパー メソッドを追加して、Friendship に関係を問い合わせることができます。
例えば:
class User ...
...
Set<User> getFriends() {
Friendship.findAllByUser(this).collect { it.friend } as Set
}
}