Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 为什么在1:1的关系中有独特的良好实践?_Grails_Gorm - Fatal编程技术网

Grails 为什么在1:1的关系中有独特的良好实践?

Grails 为什么在1:1的关系中有独特的良好实践?,grails,gorm,Grails,Gorm,在Grails文档中: 它说,在1:1中添加唯一约束是一种很好的做法。 因此,如果一张脸只有一个鼻子,我们应该: class Face { static hasOne = [nose:Nose] static constraints = { nose unique: true } } 但是为什么呢?当然,约束隐含在基数中 那么我们为什么要这样做呢?设置唯一约束的原因是为了确保两个面没有相同的鼻子。因为这是一个1:1的关系,所以鼻子的Id保持在脸上。这就是

在Grails文档中: 它说,在1:1中添加唯一约束是一种很好的做法。
因此,如果一张脸只有一个鼻子,我们应该:

class Face {
    static hasOne = [nose:Nose]
    static constraints = {
        nose unique: true
    }
}
但是为什么呢?当然,约束隐含在基数中


那么我们为什么要这样做呢?

设置唯一约束的原因是为了确保两个面没有相同的鼻子。因为这是一个1:1的关系,所以鼻子的Id保持在脸上。这就是为什么。

确保只有一个鼻子知道当前的脸

没有这一限制:

Face face = new Face();
Nose nose1 = new Nose();
face.nose = nose1;
face.save(flush: true);

Nose nose2 = new Nose();
face.nose = nose2;
face.save(flush: true); // no error, but in DB, nose1 and nose2 reference the same face_id

@约书亚@五岁以上,我期待更多的技术…但两张脸都是一样的鼻子是的,这可能是肯定的!但是,那个说我会照顾你的巴拉布拉设置的人呢……你确定如果你删除了unique会发生什么吗?如果出现错误,则不需要使用unique?@danielad简单使用hasOne并不意味着使用unique约束的原因是,可以与hasOne建立N:1关系,而不是1:1关系。例如,一个人和一所房子。房子里住着很多人。一个人拥有一套房子,并且房子id可以被多人使用,这是完全有效的。hasOne可以处理超过1:1的关系。这就是为什么。