生成一个新的Domain类,其字段与grails中的原始Domain类相同

时间:2018-04-26 09:41:31

标签: java grails gorm

每当在当前表中更改字段时,我都必须将旧数据保存到历史记录表中。因此,我必须创建一个历史Dom​​ain类,其字段与原始Domain类相同。现在,我手动创建历史Dom​​ain类,并在原始表中更新值时将旧数据保存到其中。 有没有办法在创建新的Domain类时自动生成具有相同字段的历史Dom​​ain类。

主域类是:

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]
}

2 个答案:

答案 0 :(得分:0)

也许您可以将beforeInsertbeforeUpdate方法添加到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

我希望有所帮助。