Java 生成与grails中原始域类具有相同字段的新域类

Java 生成与grails中原始域类具有相同字段的新域类,java,grails,gorm,Java,Grails,Gorm,每当当前表中的字段发生更改时,我必须将旧数据保存到历史记录表中。因此,我必须创建一个历史域类,其字段与原始域类相同。目前,我正在手动创建history域类,并在原始表中的值更新时将旧数据保存到该类中。 是否有一种方法可以在创建新域类时自动生成具有相同字段的历史域类 主域类是: class Unit { String name String description Short bedrooms = 1 Short bathrooms = 1 Short k

每当当前表中的字段发生更改时,我必须将旧数据保存到历史记录表中。因此,我必须创建一个历史域类,其字段与原始域类相同。目前,我正在手动创建history域类,并在原始表中的值更新时将旧数据保存到该类中。 是否有一种方法可以在创建新域类时自动生成具有相同字段的历史域类

主域类是:

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

也许您可以将
beforeensert
beforeUpdate
方法添加到您的
单元
域中,如下所示:

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

我需要了解更多的实际需求,以确定最好的方法是什么,但是一个可能的解决方案是使用事件监听器,事件监听器将在每次插入和/或更新主类的实例时创建历史类的实例。At是事件侦听器的一个示例。您可以创建历史类的新实例,复制相关内容,然后持久化新创建的历史实例,而不是像在该示例中看到的那样更新实例

有关GORM事件的更多信息,请参阅


希望有所帮助。

如果您的需求不是100%固定的,那么您可能需要考虑使用审计日志概念。这将为您节省大量开销,特别是对于复杂对象(例如,有许多租户……他们也都被复制了吗?)。这里有一个现有的插件:当然还有其他插件。你真的需要两个独立的域吗?或者你可以使用相同的域和版本记录,这样最新的版本总是代表当前状态,所有以前的版本代表历史?(一个单独的版本,然后是内置的乐观锁定
version
属性)是的,hasMany也被复制。根据要求,我必须创建另一个具有相同字段且后缀为“history”的表@JeffScottBrown如何在创建单元时自动生成单元历史记录。当单元中的任何字段发生更改时,它也应该反映在单元历史模式中。上面应该实现这一点:有没有一种方法可以在创建域类时自动生成具有相同字段的历史类?