GORM一对一关系,同时保留现有条目

时间:2016-07-25 13:29:12

标签: grails gorm

在浏览了GORM的文档后,我发现了如何在对象之间创建一对一的关系。但是,我还没弄清楚如何实现我想要的关系。我正在尝试创建的关系充当一对一的关系,但保留以前的行条目以用于历史目的。

例如,汽车在其整个生命周期内可拥有多个所有者。如果我有Car和Owner域对象,如何指定给定Car ID的Owners表中最新的条目是否正确?

1 个答案:

答案 0 :(得分:3)

有很多不同的方法可以对此进行建模。 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)
  } 
}