Grails一对一的关系

mro*_*rok 9 database grails grails-orm

我尝试用两种不同的方式定义一对一的关系:
Grails 2.0.3

情况1:

class Car {
    String model  
    Engine eng  
    static constraints = {
        eng unique: true
    }
}

class Engine {
    Double capacity
    static belongsTo = [car : Car]
}
Run Code Online (Sandbox Code Playgroud)

案例2:

class Car {
    String model
    static hasOne = [eng : Engine]
    static constraints = {
        eng unique: true
    }
}


class Engine {
    Double capacity
    static belongsTo = [car : Car]
}
Run Code Online (Sandbox Code Playgroud)

看起来很相似,都提供一对一的双向映射.不幸的是DB在两种情况下都有不同的结构

情况1: 在此输入图像描述

案例2: 在此输入图像描述

为什么一旦Car和一次引擎保持链接到第二个表.

我的问题在哪里?当我查看代码时,从DDD的角度来看,两种情况都表明Car类更重要,Car聚合引擎.不幸的是,当我从DB侧看案例2时,我宁愿说它是相反的 - 引擎聚合汽车.当然我可以使用第一种方法,但我看到的关于grails的大多数出版物,提出了定义关系的第二种方式.也许我误解了一些东西而且我错误地使用了hasOne?

Dav*_*enn 17

关于hasOne使用它的状态的文档创建了一个双向的一对一关系,其中外键在孩子身上.

belongsTo意味着对父进行的操作(例如保存和更新)将由hibernate级联到子进程.

所以,如果你想要的外键上Engine使用static hasOne = [engine:Engine]Car.

如果你想要的外键上Car,然后使用Engine engineCar.

在这两种情况下使用belongsTo = [car: Car]Engine