あなたが望むものは、接続コレクションに何らかの制約が適用された多対多の関係として説明できると思います。users
単方向/双方向に関しては、ユースケースに応じてどちらかを達成できると思いますが、単方向はおそらくマッピング/構成が難しいでしょう.
私はこれをテストしていませんが、双方向の多対多は次のようになります
class Connection {
...
Set users = [] //ensure users exists, constraints won't work on null
static belongsTo = [User]
static hasMany = [users: User]
static constraints = {
users maxSize: 2
}
}
class User {
...
static hasMany = [connections: Connection]
}
頭のてっぺんから単方向の例はありませんが、追加のマッピング クラスを使用する必要があるかもしれません。
繰り返しますが、これはテストしていませんが、マッピング クラスを使用した単方向の多対多の例を次に示します。
class Connection {
...
Set users = []
static hasMany = [users: ConnectionUser]
static constraints = {
users maxSize: 2
}
}
class User {
...
}
class ConnectionUser {
User user
Connection connection
//or for cascading effects
//static belongsTo = [connection: Connection]
...
... //lots of additional code to manage adding,
... //removing, updating Connection-to-User relationships
}
Connection はユーザーについて知っていますが、ユーザーは自分が属する Connection については知りません。マッピング クラス ルートに進む場合は、Connection と User の関係を手動で管理する必要があります。マッピング クラスの例については、Spring Security Core PersonAuthorityクラスをご覧ください。