4

User と Node の 2 つのドメイン クラスがあります。以下の条件が満たされている必要があります。

  • ユーザーはゼロまたは 1 つのノードを持つことができます
  • Node は 1 対 n の User を持つことができます (常に User インスタンスで初期化されます)
  • ノードを削除しても、ユーザーは削除されません
  • ユーザーを削除すると、ノード内の参照が削除されます

私は試した:

class User {
   Node node
}

class Node {

  // constructor
  Node(User user) {
    addToUsers(user)
    save()
  }  

  hasMany = [users: User]
}

前者は機能しません。ノードを削除すると、自動的に削除されない依存参照がユーザー インスタンスにあるため、機能しません。

この場合、ドメイン クラスをモデル化するにはどうすればよいでしょうか。

4

2 に答える 2

2

次のような結合テーブルを使用します。

class User {
    Set<Node> getNodes() {
        UserNode.executeQuery("select x.node from UserNode x where x.user = :user", [user: this])
    }

    def addToNodes(Node node) {
       def userNode = new UserNode()
       userNode.user = this
       userNode.node = node
       userNode.save()      
    }
}


class Node {
      Set<User> getUsers() { ... }
}

class UserNode {
   User user
   Node node
}
于 2013-11-08T12:59:03.843 に答える
0

nullable としてマークし、User クラスにマッピングをnode追加して、cascadeカスケードする操作を指定します。

class User {
    Node node

    static constraints = {
        node nullable: true
    }

    static mapping = {
        node cascade: 'save-update,delete'
    }

}
于 2013-10-29T20:32:59.987 に答える