Grails,GORM-绑定OneToMany数据时没有脏属性
我在数据绑定和脏属性方面有问题。 有两个简单的域Grails,GORM-绑定OneToMany数据时没有脏属性,grails,groovy,gorm,Grails,Groovy,Gorm,我在数据绑定和脏属性方面有问题。 有两个简单的域 class Parent { String name static hasMany = [children: Child] } 我创建了一个简单的rest控制器来检查所有选项 class TestController { static responseFormats = ['json'] @Transactional def add() { def parent = new Paren
class Parent {
String name
static hasMany = [children: Child]
}
我创建了一个简单的rest控制器来检查所有选项
class TestController {
static responseFormats = ['json']
@Transactional
def add() {
def parent = new Parent(name: params.name).save()
respond(parent)
}
@Transactional
def parents() {
def parents = Parent.findAll()
respond(parents)
}
@Transactional
def testWithCommand(ParentCmd cmd) {
Parent parent = Parent.findById(cmd.id)
bindData(parent, cmd)
parent.save()
respond(parent)
}
@Transactional
def testWithParams() {
Parent parent = Parent.findById(params.id)
bindData(parent, params)
parent.save()
respond(parent)
}
@Transactional
def testWithRelation(ParentCmd cmd) {
Parent tempParent = new Parent()
bindData(tempParent, cmd)
Parent parent = Parent.findById(cmd.id)
for (Child child : tempParent.children) {
parent.addToChildren(child)
}
parent.save()
respond(parent)
}
}
所以我们有3个更新选项:带绑定的cmd、带绑定的params和带addTo的cmd*
我创建了简单事件来捕获脏属性
class TestEventListener extends AbstractPersistenceEventListener {
protected TestEventListener(Datastore datastore) {
super(datastore)
}
@Override
protected void onPersistenceEvent(AbstractPersistenceEvent event) {
if (event.entityObject instanceof Parent) {
List<String> dirtyProperties = new ArrayList<String>(((DirtyCheckable) event.entityObject).listDirtyPropertyNames())
println("DIRTY PROPERTIES: " + dirtyProperties.size())
println(dirtyProperties.join(", "))
}
}
@Override
boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
eventType == PreUpdateEvent.class
}
}
类TestEventListener扩展了AbstractPersistenceEventListener{
受保护的TestEventListener(数据存储数据存储){
超级(数据存储)
}
@凌驾
受保护的void onPersistenceEvent(AbstractPersistenceEvent事件){
if(父级的event.entityObject instanceof){
List dirtyproperty=new ArrayList(((DirtyCheckable)event.entityObject.listDirtyPropertyNames())
println(“脏属性:+dirtyproperty.size())
println(dirtyProperty.join(“,”))
}
}
@凌驾
布尔支持SeventType(类
class TestEventListener extends AbstractPersistenceEventListener {
protected TestEventListener(Datastore datastore) {
super(datastore)
}
@Override
protected void onPersistenceEvent(AbstractPersistenceEvent event) {
if (event.entityObject instanceof Parent) {
List<String> dirtyProperties = new ArrayList<String>(((DirtyCheckable) event.entityObject).listDirtyPropertyNames())
println("DIRTY PROPERTIES: " + dirtyProperties.size())
println(dirtyProperties.join(", "))
}
}
@Override
boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
eventType == PreUpdateEvent.class
}
}