Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 无依赖删除的GORM关系_Grails_Spring Mvc_Gorm_Grails 2.0_Grails Domain Class - Fatal编程技术网

Grails 无依赖删除的GORM关系

Grails 无依赖删除的GORM关系,grails,spring-mvc,gorm,grails-2.0,grails-domain-class,Grails,Spring Mvc,Gorm,Grails 2.0,Grails Domain Class,我有两个域类User和Node。以下条件应适用 用户可以有零个或一个节点 一个节点可以有一到n个用户(它总是用一个用户实例初始化) 如果删除节点,则不会删除用户 如果删除用户,则节点中的引用将被删除 我试过: class User { Node node } class Node { // constructor Node(User user) { addToUsers(user) save() } hasMany = [users: User

我有两个域类User和Node。以下条件应适用

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

class User {
   Node node
}

class Node {

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

  hasMany = [users: User]
}
前者不起作用。它不起作用,因为删除节点时,用户实例中存在不会自动删除的从属引用


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

节点
标记为可空,并向用户类添加一个
级联
映射,指定要级联的操作:

class User {
    Node node

    static constraints = {
        node nullable: true
    }

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

}

使用如下方式的联接表:

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
}
类用户{
设置getNodes(){
UserNode.executeQuery(“从UserNode x中选择x.node,其中x.user=:user”,[user:this])
}
def addToNodes(节点){
def userNode=new userNode()
userNode.user=this
userNode.node=node
userNode.save()
}
}
类节点{
设置getUsers(){…}
}
类用户节点{
用户用户
节点
}

关于它“不起作用”怎么办?@JamesKleeh我更新了我的问题。用户表发生了什么变化?如果删除节点时存在外键,则节点\u id可能不存在。但如果删除一个用户,我不希望删除该节点。如果没有更多用户与该节点关联,我希望删除该节点。