Grails 读取 GORM 映射
Grails read GORM Mapping
我目前正在开发一个 AuditListener 来为我想要的每个 DomainClass 创建一个历史条目。
我创建了一个 AuditListener
class 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
。
你对我有什么建议吗?
如果找到了获取列映射的解决方案:
GrailsDomainBinder grailsDomainBinder = new GrailsDomainBinder()
grailsDomainBinder.getMapping(domainClassObject.class).columns?.each{column ->
println column
}
我目前正在开发一个 AuditListener 来为我想要的每个 DomainClass 创建一个历史条目。
我创建了一个 AuditListener
class 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
。
你对我有什么建议吗?
如果找到了获取列映射的解决方案:
GrailsDomainBinder grailsDomainBinder = new GrailsDomainBinder()
grailsDomainBinder.getMapping(domainClassObject.class).columns?.each{column ->
println column
}