我希望在不指定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
}我不能在Person域或AuditingInfo类中使用beforeInsert和beforeUpdate事件,因为它总是在org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener中导致NullPointerException。因此,我希望使用metaClass方式,如下所示(此操作在*GrailsPlugin.groovy文件中定义,但不幸的是,我的项目是Grails项目,而不是Grails插件项目):
def doWithDynamicMethods = { ctx ->
application.domainClasses.each { org.codehaus.groovy.grails.commons.GrailsDomainClass gc ->
gc.metaClass.beforeInsert = {
}
gc.metaClass.beforeUpdate = {
}
}
}如何将此方法应用于我的项目上下文?非常感谢。
发布于 2012-02-15 00:24:50
您可以从启动时执行的Bootstrap.groovy中应用您的metaClass修改。
发布于 2012-02-15 15:53:08
同意doelleri的观点
只需添加您的代码:
application.domainClasses.each { org.codehaus.groovy.grails.commons.GrailsDomainClass gc ->
gc.metaClass.beforeInsert = {
}
gc.metaClass.beforeUpdate = {
}
}到BootStrap.groovy中
https://stackoverflow.com/questions/9280340
复制相似问题