4

我有两个域类用户和节点。以下条件应成立。

  • 一个用户可以有零个或一个节点
  • 一个节点可以有一个到 n 个用户(它总是用一个用户实例初始化)
  • 如果您删除节点,则不会删除用户
  • 如果您删除用户,则节点中的引用将被删除

我试过:

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

标记node为可空并添加cascade到 User 类的映射,指定您想要级联的操作:

class User {
    Node node

    static constraints = {
        node nullable: true
    }

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

}
于 2013-10-29T20:32:59.987 回答