阅读GORM的文档后,我想出了如何在对象之间创建一对一关系。但是,我还没有弄清楚如何实现我想要的关系。我正在尝试创建的关系是一对一的,但出于历史目的保留了先前的行条目。
例如,一辆汽车在整个生命周期中可以有多个所有者。如果我有Car和Owner域对象,如何指定给定Car ID的Owners表中的最新条目是正确的条目?
最佳答案
有许多不同的方式对此进行建模。 IMO,最灵活的方法之一是:
class User {
String name
static hasMany = [ownerships: Ownership]
}
class Car {
String name
static hasMany = [ownerships: Ownership]
}
class Ownership {
Date start
Date end
static belongsTo = [owner: User, car: Car]
}
例如,当Ann将她的汽车卖给Bob时,我们将Ann的
Ownership
记录的结束时间设置为销售时间,并为Bob保存了新的Ownership
记录,并将开始时间设置为销售时间。如果获取汽车的当前所有者是我们经常需要执行的操作,则可以在
currentOwner
中添加Car
方法class Car {
String name
static hasMany = [ownerships: Ownership]
Ownership currentOwner() {
// depending on how this method is used, you might want to
// return the User instead of the Ownership
Ownership.findByEndIsNullAndCar(this)
}
}
关于grails - GORM一对一关系,同时保留现有条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38569099/