2016-12-16 62 views
0

我目前正在開發一個AuditListener來爲我想要的每個DomainClass創建一個歷史記錄條目。Grails讀取GORM映射

我創建了一個AuditListener

類AuditingListener擴展AbstractPersistenceEventListener {

public AuditingListener(final Datastore datastore){ 
    super(datastore) 
} 

@Override 
protected void onPersistenceEvent(final AbstractPersistenceEvent event){ 
    switch(event.eventType){ 
     case EventType.PostInsert: 
      onPostInsert(event as PostInsertEvent) 
      break 
     case EventType.PreUpdate: 
      onPreUpdate(event as PreUpdateEvent) 
      break 
     case EventType.PreDelete: 
      onPreDelete(event as PreDeleteEvent) 
      break 
    } 
} 

def onPreUpdate(PreUpdateEvent event){ 
    Object domainClassObject = event.entityObject 
    PersistentEntity entity = event.entity 

    if(isAuditableEntity(domainClassObject)){ 
     try { 
      GrailsDomainClass grailsDomainClass = getGrailsDomainClass(domainClassObject) 
      Set<String> propertyNames = getPropertyNames(grailsDomainClass) 
      if(propertyNames){ 
       Map properties = getPropertiesMap(propertyNames, domainClassObject, grailsDomainClass) 
       createRevisionEntity(entity, grailsDomainClass, domainClassObject, properties) 
      } 

     } catch(Exception e){ 
      log.error "Could not found Audit domainClassObject Class of ${domainClassObject}", e 
     } 
    } 
} 

現在我想創建方法createRevisionEntity應該創建當前實體的修訂。該方法應創建一個名爲RevisionEntity的新對象,並動態添加當前DomainClassObject的所有屬性。因此,我將擁有我想要的任何DomainClass的修訂實體,類似於休眠Envers。

我可以動態地將屬性設置爲RevisionEntity但我的問題是我沒有得到映射信息並將它放在RevisionEntity中。

對我有什麼建議嗎?

+0

你看着審計日誌插件?它在我們手中運作良好。 – helgew

回答

0

如果找到了解決geht列映射:

GrailsDomainBinder grailsDomainBinder = new GrailsDomainBinder() 
    grailsDomainBinder.getMapping(domainClassObject.class).columns?.each{column -> 
     println column 
    }