【问题标题】:How can I make grails accept a belongsTo relation that can be null?如何让 grails 接受可以为空的 belongsTo 关系?
【发布时间】:2011-11-02 23:18:28
【问题描述】:

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

【问题讨论】:

    标签: grails


    【解决方案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)
        }
    }
    

    【讨论】:

    • 我已经添加了一个回复作为对我的问题的编辑,因为我无法弄清楚如何在 stackOverflow 评论框上正确格式化。
    • 所以我想问题是我如何才能拥有一个属于另一个 classB 的 classA,但该父 classB 有一个空值,并且能够在不指定 classB 的情况下从 classA 实例化一个对象classA 属于什么?
    • 这有点问题:def beforeDelete = { classA?.classB? = null classA?.delete(flush:true) } 无论我用它做什么,我都会不断得到红色 Xes。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多