我想清除一个集合并同时更新它。它有孩子,找到收藏中的当前项目并异步删除它们会为我节省很多时间。Grails,Promise API和两个打开的会话
第1步。找到集合中的所有项目。 第2步。一旦我知道这些项目是什么,分叉进程删除它们。
def memberRedbackCriteria = MemberRedback.createCriteria()
// #1 Find all the items in the collection.
def oldList = memberRedbackCriteria.list { fetchMode("memberCategories", FetchMode.EAGER) }
// #2 Delete them.
Promise deleteOld = task {
oldList.each { MemberRedback rbMember ->
rbMember.memberCategories.clear()
rbMember.delete()
}
}
的错误信息是:非法尝试集合有两个打开的会话
关联我猜想那是因为我找到的项目,然后叉,这将创建一个新的会话,以便收集建分叉之前和新会话用于删除项目。
我需要收集当前线程中的项目,否则我不确定状态是什么。
这和做同步不一样吗?我的意思是你可以运行条件来提取协会热切,然后删除它们? – dmahapatro
似乎为四十万像素上的100k记录节省10分钟。 – Interlated
删除时间比生成时间长。删除35分钟为一个线程。创建的项目包括从远程服务器下载,计算增量和节省30k - 花了25分钟。 – Interlated