Горм: объектное картирование - PullRequest
0 голосов
/ 08 июля 2019

У меня есть два объекта, CarOffer и Car. CarOffer состоит из различных атрибутов, один из которых ссылается на Car. Другими словами, у меня может быть несколько CarOffer, несколько автомобилей, но на CarOffer остается только одна и только одна машина. Автомобиль может присутствовать в нескольких CarOffers. Удаление CarOffer не должно удалять автомобиль, на который он ссылается, и удаление Car не должно быть возможным, если все CarOffers, ссылающиеся на него, также не были удалены.

Обычно я бы просто добавил атрибут CarId в CarOffer, но из документации gorm я чувствую, что должен использовать силу Gorm для добавления объекта Car в CarOffer вместо просто его идентификатора.

Тем не менее, я немного растерялся, я не чувствую, что ни «ownTo», ни «hasOne» действительно соответствуют тому, что я хочу.

Кроме того, как бы я пошел, чтобы создать новый CarOffer? Я ожидал, что смогу сделать

new CarOffer(carId: 123).save()

но вместо этого я чувствую, что должен сделать:

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

Разве это не создает один дополнительный запрос?

1 Ответ

0 голосов
/ 08 июля 2019

Я не чувствую, что ни "ownTo", ни "hasOne" действительно соответствуют тому, что я хочу.

Вы не хотите belongsTo, потому что это приведет к каскадному удалению, и высказал, что вы этого не хотите («Удаление CarOffer не должно удалять автомобиль, на который он ссылается»).

Вы можете использовать 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)
...