Дом принадлежит владельцу?

#grails #grails-orm

#grails #grails-orm

Вопрос:

Интересно, является ли «belongsTo» способом записи для представления отношений собственности, где всегда есть родительский объект, но родительский объект может переключаться.

т.е. если домен владельца

 class Owner {
  String name

}
  

Должен ли дом быть:

 class House {
   String address
   Owner owner
}
  

или

 class House {
   String address
   static belongsTo = [owner: Owner]
}
  

Чего я хочу добиться, так это двунаправленности 1: 1, где я могу получить доступ либо к owner.house, либо к house.владелец и возможность смены владельца без удаления старого владельца.

Ответ №1:

without deleting the old owner. ?

Итак, у вас есть два варианта — безусловно, самый простой, и где ваш текущий метод на самом деле неправильный, Should House be: может быть, это?

 class House {
   String address
   static hasMany = [owner:Owner]
   Owner currentOwner
}
  

С учетом существующих отношений вы говорите, что у дома много владельцев. Итак, owner1 owner2 .. и у него также есть текущий владелец, который сам является владельцем.
Каждый раз, когда вы добавляете новую запись, вы добавляете ее в коллекцию владельцев, house.addToOwner(owner) а затем устанавливаете последнее / последнее обновление currentOwner=owner .

Комментарии:

1. Ну, я думаю, было бы точнее сказать, что у дома есть 1 текущий владелец. Возможно, в прошлом у него были разные владельцы, но мне действительно не нужно хранить эту историю в объекте.

2. It may have had different owners in the past, but I don't really need to store that history in the object vs owner and ability to change the owner without without deleting the old owner Вы могли бы создать таблицу, содержащую дом и владельца, и в которой вы регистрируете оба идентификатора как историю — затем вы можете найти и найти Allbyuser или House и повторно подключиться к объекту House или User

Ответ №2:

Если вы хотите перейти к обоим объектам, а отношение равно 1: 1, вы можете использовать hasOne

 class Owner {
  String name
  static hasOne = [house: House]
}

class House {
   String address
   static belongsTo = [owner: Owner]
}