Как вызвать сущности OnLoad () с использованием Hibernate Envers?

голоса
0

Я добавляю Hibernate Envers к моему проекту Grails 3. Я заметил , что один из моих организаций, которая имеет onLoad()событие, onLoad()событие никогда не вызываются для пересмотра субъектов Envers.

Как я могу убедиться, что этот код всегда вызывается, даже для исторических версий этого объекта?

Пример использования:

Я работаю на RESTful службы с использованием представлений Grails 3 JSON. Один из моих классов предметной области имеет столбец дискриминатора, который также должен быть представлен на выходе JSON , так что потребитель может сказать , что типа это. По этой причине сущность домена определяет onLoad()метод , который заполняет временное свойство , соответствующее тип дискриминатора:

class MyChildDomainClass extends MyBaseDomainClass {
    void onLoad() {
        valueType = ValueType.STRING
    }

    static mapping = {
        discriminator value: ValueType.STRING
    }
}

Это отлично работает для обычных экземпляров домена, но когда я смотрю в пересмотр лица из Envers' AuditQueryCreator, то queyr аудита не вызывая onLoad()метод.

Похоже , что я мог бы петлю над результатами и вызвать вручную onLoad(), но я надеялся , что там был лучший способ это исправить.

Заранее спасибо!

Задан 13/01/2020 в 23:59
источник пользователем
На других языках...                            


2 ответов

голоса
0

Вы можете попробовать изменить тип возвращаемого значения «DEF», как указано в документ здесь

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
Ответил 16/01/2020 в 00:32
источник пользователем

голоса
0

Как я могу убедиться, что этот код всегда вызывается, даже для исторических версий этого объекта?

Я не очень хорошо знаком с Grails, но они выглядят очень похоже на типичный жизненный цикл событий JPA аннотированных событий и их вероятные методы, которые GORM (так же, как JPA Implementor) ищет и вызываете на основе жизненного цикла объекта.

Большой важно заберите здесь является то , что объекты , возвращаемые Envers запросов API не являются объектами. Эти объекты не находятся под управлением поставщиком сохраняемости, поэтому его важно четко сделать это различие , как , что влияет много ожиданий поведения , такие как сохранение отдельных лица, образования событий жизненного цикла и т.д.

Если есть некоторые почтовые инициализирует или другие функции обратного вызова в течение жизненного цикла , что вам нужно огня при извлечении результатов из AuditQuery, его на пользовательский код , чтобы сделать эти различия и вызывать эти методы по мере необходимости.

Ответил 17/01/2020 в 23:32
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more