grails – 没有依赖删除的GORM关系

我有两个域类User和Node.应满足以下条件.

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

我试过了:

class User {
   Node node
}

class Node {

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

  hasMany = [users: User]
}

前者不起作用.它不起作用,因为当您删除节点时,在用户实例中存在一个不会自动删除的依赖引用.

在这种情况下,如何为域类建模?

最佳答案 使用这样的连接表:

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
}
点赞