Gorm:对象映射

时间:2019-07-07 22:59:41

标签: grails groovy gorm

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

通常,我只是将carId属性添加到CarOffer中,但是从gorm文档中,我觉得我应该利用Gorm的功能将Car Object添加到CarOffer中,而不仅仅是其id。

但是我有点迷茫,我觉得'belongsTo'和'hasOne'都没有真正映射到我想要的东西。

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

new CarOffer(carId: 123).save()

但是我觉得我必须这样做:

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

这不会创建一个额外的请求吗?

1 个答案:

答案 0 :(得分:0)

  

我觉得'belongsTo'和'hasOne'都没有真正映射到我想要的东西。

您不希望使用belongsTo,因为那样会导致级联删除操作,并且您说过您不希望这样做(“删除行车者不应该删除其所引用的汽车”)。

您是否可以使用hasOne,这将影响其中有外键的表。

如果您不想使用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
}
  

...我将如何创建一个新的CarOffer?

这取决于您尚未提及的应用程序中的详细信息,但是您可以执行以下操作...

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