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
に入れてしまったことです。
私には何か提案がありますか?
を、あなたは、監査ログのプラグインで見たことがありますか?私たちの手にはうまくいきます。 – helgew