是否有可能在一对一的关系中使nullable = true?

时间:2016-01-14 11:12:27

标签: grails gorm

这两个域名如下:

class Face {

    static hasOne = [nose:Nose]

    static constraints = {
        nose unique: true

    }

}   


class Nose {
    Face face

    static constraints = {

    }
}

外键将在Nose表中。鼻子表引用了Face表。 Nose表中的face_id列不可为空。我想知道是否可以使这个列可以为空。我尝试了以下约束变体,但它们似乎都没有改变表的结构。

class Face {

    static hasOne = [nose:Nose]

    static constraints = {
        nose unique: true
        nose nullable: true

    }

}


I also tried the following 

class Nose {
    Face face

    static constraints = {
        face nullable:true
    }
}

我需要这两个域之间的一对一关系,但也希望能够创建独立的Nose或Face实体或记录。那可能吗?如果是这样,你能提出一个方法吗?谢谢!欣赏它!

2 个答案:

答案 0 :(得分:1)

您可以创建第三个关系域,指定Face和Nose之间的关系。

convert: no data returned `http://www.polyu.edu.hk/iaee/files/pdf-sample.pdf' @ error/url.c/ReadURLImage/264.
convert: no images defined `/www/sites/domain/public_html/test.jpg' @ error/convert.c/ConvertImageCommand/3241.

这满足了您对一对一关系的需求以及两者的独立条目。

答案 1 :(得分:0)

使用hasOne关系,Grails会创建“not null”外键。

class Face{
     ..
     static hasOne = [nose : Nose]
}

class Nose{
     Face face
}

在鼻子表中使用“not null”face_id创建“face_id”。

解决方法

class Face{
     ..
     static hasMany = [noses: Nose]
     static transients = ['getNose']

     Nose getNose{
         return this.noses[0] ?: null 
     }
}

face.nose //这会起作用