2012-02-14 7 views
2

Я хочу сохранить свой класс домена в базе данных без указания createdUser или createdDate. Я создал объект под названием AuditingInfo и заливали его в главном классе домена Person так:Домен Grails доInsert/beforeUpdate

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 = { 
     } 
    } 
} 

Как я могу применить этот метод к моему контексту проекта? Огромное спасибо.

ответ

3

Вы можете применить модификации metaClass из своего Bootstrap.groovy, который выполняется при запуске.

2

согласен с doelleri

просто добавить код:

application.domainClasses.each { org.codehaus.groovy.grails.commons.GrailsDomainClass gc -> 
        gc.metaClass.beforeInsert = { 
        } 
        gc.metaClass.beforeUpdate = { 
        } 
     } 

В BootStrap.groovy

Смежные вопросы