Домен Grails beforeInsert / beforeUpdate
Я хочу сохранить мой доменный класс в базе данных без указания createdUser
или createdDate
. Я создал объект под названием AuditingInfo
и внедрил его в основной доменный класс Person
следующим образом:
AuditingInfo.groovy
:
class AuditingInfo {
static constraints = {
createdUser (nullable : true)
updatedUser (nullable : true)
createdDate(nullable : true)
updatedDate(nullable : true)
}
static mapping = {
columns {
createdUsercolumn: 'T_CREATED_USER'
updatedUsercolumn: 'T_UPDATED_USER'
createdDatecolumn: 'T_CREATED_DATE'
updatedDatecolumn: 'T_UPDATED_USER'
}
}
User createdUser
User updatedUser
Date createdDate
Date updatedDate
}
Person.groovy
:
class Person {
static embedded = ['auditingInfo']
AuditingInfo auditingInfo
static constraints = { auditingInfo(nullable: true) }
String name
Long id
}
Я не могу использовать события beforeInsert
и beforeUpdate
в домене Person
или классе AuditingInfo
, потому что это всегда вызывает NullPointerException
в org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener
.
Поэтому я хочу использовать способ metaClass
, как показано ниже (это действие определено в файле *GrailsPlugin.groovy
, но, к сожалению, мой проект-это проект Grails, а не проект плагина Grails):
def doWithDynamicMethods = { ctx ->
application.domainClasses.each { org.codehaus.groovy.grails.commons.GrailsDomainClass gc ->
gc.metaClass.beforeInsert = {
}
gc.metaClass.beforeUpdate = {
}
}
}
Как я могу применить этот метод к контексту моего проекта? Огромное спасибо.