【发布时间】:2018-04-26 09:41:30
【问题描述】:
每当当前表中的字段发生更改时,我都必须将旧数据保存到历史表中。因此,我必须创建一个与原始域类具有相同字段的历史域类。现在,每当原始表中的值更新时,我手动创建历史域类并将旧数据保存到其中。 有没有办法在创建新域类时自动生成具有相同字段的历史域类。
主域类是:
class Unit {
String name
String description
Short bedrooms = 1
Short bathrooms = 1
Short kitchens = 1
Short balconies = 0
Short floor = 1
Double area = 0.0D
Date expDate
Date lastUpdated
static hasMany = [tenants:Tenant]
static belongsTo = [property: Property]
}
History Domain 类应该是这样的:
class UnitHistory {
String name
String description
Short bedrooms = 1
Short bathrooms = 1
Short kitchens = 1
Short balconies = 0
Short floor = 1
Double area = 0.0D
Date expDate
Date lastUpdated
static hasMany = [tenants:Tenant]
static belongsTo = [property: Property]
}
【问题讨论】:
-
如果您的要求不是 100% 固定的,您可能需要考虑使用审计日志记录概念。这将为您节省大量开销,尤其是对于复杂的对象(例如 hasMany 租户......它们是否也都被复制了?)。一个现有的插件在这里:plugins.grails.org/plugin/robertoschwald/audit-logging 虽然当然还有其他插件。
-
您真的需要 2 个单独的域,还是可以使用同一个域并对记录进行版本化,以便最新版本始终代表当前状态,而所有以前的版本都代表历史? (当然是一个单独的版本,然后是内置的乐观锁定
version属性) -
是的,hasMany 也被复制了。根据要求,我必须创建另一个具有相同字段且后缀为“历史”的表。 @JeffScottBrown
标签: java grails grails-orm