每当在当前表中更改字段时,我都必须将旧数据保存到历史记录表中。因此,我必须创建一个历史Domain类,其字段与原始Domain类相同。现在,我手动创建历史Domain类,并在原始表中更新值时将旧数据保存到其中。 有没有办法在创建新的Domain类时自动生成具有相同字段的历史Domain类。
主域类是:
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]
}
历史域类应该是这样的:
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]
}
答案 0 :(得分:0)
也许您可以将beforeInsert
和beforeUpdate
方法添加到Unit
域中,如下所示:
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
def beforeInsert() {
addHistory()
}
def beforeUpdate() {
addHistory()
}
def addHistory(){
new UnitHistory( this.properties ).save( failOnError: true )
}
}
答案 1 :(得分:0)
我需要了解更多有关实际要求的信息,以确定最好的做法是什么,但可以考虑的一个可能的解决方案是使用一个事件监听器,每次实例时都会创建历史类的实例插入和/或更新主类。 https://github.com/jeffbrown/gorm-events-demo/blob/261f25652e5fead8563ed83f7903e52dfb37fb40/src/main/groovy/gorm/events/demo/listener/AuditListener.groovy#L22是事件监听器的示例。您可以创建历史类的新实例,复制相关内容,然后保留新创建的历史记录实例,而不是像在该示例中看到的那样更新实例。
有关GORM事件的详细信息,请参阅https://async.grails.org/latest/guide/index.html#gormEvents。
我希望有所帮助。