如何让grails接受可以为null的belongsTo关系?

时间:2011-11-02 23:18:29

标签: grails

我想要做的是有两个相互引用的域名。然而,一个人不一定拥有另一个人或属于另一个人。来自两个域的每个对象可以引用来自另一个域的0或1个对象。

我有这段代码,但它不起作用:

class Domain1{

    //declare some vars
          ...

    static belongsTo = [domain2Object:Domain2]

    static constraints = {
    domain2Object(nullable:true)
    }
}

将hasOne与nullable:true约束一起使用,但如果另一方具有相同的东西,它就不起作用。关键是我希望能够从任何从另一个域引用对象的域中删除任何对象,而不会导致被引用的对象被删除。就像我说的那样,没有任何对象属于另一个,他们只是互相引用。

=============================================== ========================================== 响应:

在两个域类中使用它:

class ClassB {
   static hasOne = [classA:ClassA]

   def beforeDelete = {
      classA?.delete()
   }
}

static constraints = {
    classA(nullable:true)
}

当我尝试添加两个类中的任何一个对象而另一个类空白时,我收到此错误:

“完整性约束违规 - 没有父级FK24742AC1AA048190表:PENDINGORDER”

1 个答案:

答案 0 :(得分:1)

您可以使用“hasOne”onDelete事件。

class ClassB {
   static hasOne = [classA:ClassA]

   def beforeDelete = {
      classA?.delete()
   }
}

Events and Auto Timestamping

我猜这个异常是因为你试图通过beforeDelete事件中的关系删除一个对象。删除你的关系,然后删除它:

class ClassA {
  ClassB classB

  static constraints = {
      classB nullable: true
  }
}

class ClassB {
    ClassA classA

    static constraints = {
      classA nullable: true
    }

    def beforeDelete = {
      classA?.classB? = null
      classA?.delete(flush:true)
    }
}