2016-12-16 4 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のすべてのプロパティを動的に追加する必要があります。それで、私はEniberを冬眠させるのと同じように、私が望む任意のDomainClassのRevisioned Entityを持っています。

私は動的にプロパティをRevisionEntityに置くことができますが、私の問題はマッピング情報を得ておらず、RevisionEntityに入れてしまったことです。

私には何か提案がありますか?

+0

を、あなたは、監査ログのプラグインで見たことがありますか?私たちの手にはうまくいきます。 – helgew

答えて

0

列マッピングgehtするための解決策が見つかった場合:

GrailsDomainBinder grailsDomainBinder = new GrailsDomainBinder() 
    grailsDomainBinder.getMapping(domainClassObject.class).columns?.each{column -> 
     println column 
    } 
関連する問題