Gorm:对象映射

Gorm: object mapping

我有两个对象,一个 CarOffer 和一个 Car。 CarOffer 由各种属性组成,其中一个引用汽车。换句话说,我可以有多个 CarOffer,多辆 Car,但每个 CarOffer 只能有一辆 Car。一辆汽车可以出现在多个 CarOffer 中。删除 CarOffer 不应删除它引用的汽车,除非引用它的所有 CarOffer 也已被删除,否则删除 Car 是不可能的。

通常,我只会向 CarOffer 添加一个 carId 属性,但从 gorm 文档中我觉得我应该使用 Gorm 的强大功能向 CarOffer 添加一个 Car 对象,而不仅仅是它的 id。

不过我有点迷茫,我觉得 'belongsTo' 和 'hasOne' 都不是我想要的。

此外,我该如何创建一个新的 CarOffer? 我希望能够做到

new CarOffer(carId: 123).save()

但我觉得我必须这样做:

new CarOffer(car: Car.get(123)).save()

这不会产生一个额外的请求吗?

I feel neither 'belongsTo' nor 'hasOne' really map to what I want.

您不希望 belongsTo 因为这会导致级联删除,而您说您不希望 ("Deleting a CarOffer should not delete the car it references")。

您可以使用或不使用 hasOne,这将影响哪个 table 中有外键。

如果您不想使用 carId 方法,您可以这样做:

class CarOffer {
    String attribute1
    int attribute 2
    // etc...

    Car car
}

class Car {
    String attribute1
    // etc...

    // There could be, but does not need to be
    // any mention of CarOffer in this class
}

...how would I go to create a new CarOffer?

这取决于您的应用中您未提及的详细信息,但您可以这样做...

Car c = // ...
CarOffer co = new CarOffer(attribute1: 'something', attribute2: 2112, car: c)