Генерация нового класса Домена с теми же полями, что и у исходного класса Домена в Grails - PullRequest
0 голосов
/ 26 апреля 2018

Я должен сохранить старые данные в таблицу истории при каждом изменении поля в текущей таблице. Следовательно, мне нужно создать исторический класс 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]
}

Класс Domain History должен быть таким:

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 голосов
/ 27 апреля 2018

Мне нужно было бы узнать больше о реальных требованиях, чтобы точно знать, что лучше всего сделать, но одно из возможных решений, которое следует рассмотреть, - это использование прослушивателя событий, который будет создавать экземпляры класса истории каждый раз, когда экземпляр основной класс вставляется и / или обновляется. На https://github.com/jeffbrown/gorm-events-demo/blob/261f25652e5fead8563ed83f7903e52dfb37fb40/src/main/groovy/gorm/events/demo/listener/AuditListener.groovy#L22 пример слушателя событий. Вместо обновления экземпляра, как вы видите в этом примере, вы можете создать новый экземпляр вашего класса истории, скопировать соответствующий материал и затем сохранить этот вновь созданный экземпляр истории.

См. https://async.grails.org/latest/guide/index.html#gormEvents для получения дополнительной информации о событиях GORM.

Надеюсь, это поможет.

0 голосов
/ 26 апреля 2018

Возможно, вы могли бы добавить 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 )
    }
}
...