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