我使用grails 2.3.11和hibernate 3.6.10.16创建了一个应用程序,我有一个像这样的域类模型:
class Parent{
String name
static hasMany = [fooChildren: Foo]
}
class Foo{
String name
String attribute1
String attribute2
static belongsTo = [parent: Parent]
def beforeDelete(){
LogClass.executeUpdate "UPDATE LogClass SET action=:action WHERE objid=:objid", [action: "DELETE", objid: this.id]
}
}
请注意,Foo类有一个beforeDelete方法,它对名为LogClass的类执行更新
问题是当我打电话时(当然是在服务方法内)
Parent p = Parent.get(2) //Parent has 1000 or more fooChildren
p.delete()
删除过程非常慢,我想知道每次调用LogClass.executeUpdate时是否刷新会话。
如果是这样,有没有办法控制会话刷新?
我试过了:
LogClass.executeUpdate "UPDATE LogClass SET action=:action WHERE objid=:objid", [action: "DELETE", objid: this.id], [flushMode: FlushMode.COMMIT]
但是当我这样做时,我收到以下错误
No signature of method: LogClass.executeUpdate() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap, java.util.LinkedHashMap)
有没有办法控制executeUpdate方法的会话刷新?我知道会话刷新可以使用executeQuery或动态查找器来控制,但我还没有找到在executeUpdate中这样做的方法。
任何帮助将不胜感激。
P上。 S.我知道问题在于beforeDelete方法,因为当我删除它时,删除过程就像100倍快。
或者可能是级联行为?