GORM关系没有依赖删除 [英] GORM Relations without dependent delete

查看:105
本文介绍了GORM关系没有依赖删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个域类User和Node。以下条件应成立。


  • a用户可以有零个或一个节点
  • 节点可以有一个到n用户它始终使用User实例进行初始化)

  • 如果删除节点,用户将不会被删除

  • 如果删除用户,该节点将被删除



我试过了:

  class User {
Node节点
}

类节点{

//构造函数
节点(用户用户) {
addToUsers(用户)
save()
}

hasMany = [用户:用户]
}

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



我如何建模域在这种情况下使用连接表?


$

解决方案

b $ b

  class User {
Set< 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()
}
}


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

class UserNode {
用户用户
节点节点
}


I have two domain classes User and Node. The following conditions should hold.

  • a User can have zero or one node
  • a Node can have one to n User (it is always initialized with a User instance)
  • if you delete a Node the User will not be deleted
  • if you delete a User the reference in the Node will be deleted

I tried:

class User {
   Node node
}

class Node {

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

  hasMany = [users: User]
}

The former does not work. It does not work because when you delete a node there is a dependent reference in the user instance that will not be delete automatically.

How can I model the domain classes in this case?

解决方案

Use a join table like this:

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
}

这篇关于GORM关系没有依赖删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆