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

如何使grails接受可以为null的belongsTo关系?,grails,Grails,我想做的是有两个相互引用的域。然而,一方不一定拥有另一方或属于另一方。两个域中的每个对象都可以引用另一个域中的0或1个对象 我有这个代码,但它不起作用: class Domain1{ //declare some vars ... static belongsTo = [domain2Object:Domain2] static constraints = { domain2Object(nullable:true) } } 将

我想做的是有两个相互引用的域。然而,一方不一定拥有另一方或属于另一方。两个域中的每个对象都可以引用另一个域中的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”

您可以使用“hasOne”onDelete事件

class ClassB {
   static hasOne = [classA:ClassA]

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

我猜发生异常是因为您试图在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)
    }
}
您可以使用“hasOne”来删除事件

class ClassB {
   static hasOne = [classA:ClassA]

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

我猜发生异常是因为您试图在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)
    }
}

我已经添加了一个回复作为我问题的编辑,因为我不知道如何在stackOverflow评论框中正确设置格式。所以我想问题是,我如何才能拥有属于另一个classB的classA,但是父类B却有一个空值,并且能够从类a实例化一个对象,而不指定该类a所属的类B?…或者更好的是,我怎么能拥有一个hasOne关系,而不需要另一端的相应belongsTo关系。这有一个错误:def beforeDelete={classA?.classB?=null classA?.delete(flush:true)}无论我用它做什么,我都会得到红色的Xes。我已经在我的问题中添加了一个响应作为编辑,因为我不知道如何在stackOverflow注释框中正确设置格式。所以我想问题是,我如何才能拥有一个属于另一个classB的classA,但该父classB却有一个空值,并且能够从中实例化一个对象classA没有指定classA所属的classB?…或者更好,我怎么能拥有一个hasOne关系,而不需要另一端的对应belongsTo关系。这有一个错误:def beforeDelete={classA?.classB?=null classA?.delete(flush:true)}不管我用它做什么,我都会被弄红。