东西没有被冲走。发生的情况的简化示例:
def testDemo() { def person = new Person(...) person.save(flush: true) println "Number of people after save: " + Person.all.size() def dummyList = [1, 2, 3, 4, 5] GParsPool.withPool { num -> println "Number of people after withPool: " + Person.all.size() dummyList.eachParallel { println "Number of people after eachParallel " + Person.all.size() Person.withTransaction { ...
输出:
Number of people after save: 1 Number of people after withPool: 1 Number of people after eachParallel: 0
我不知道是否必须对Session和Transaction进行某些操作才能使数据持久化,或者这是GPar中的错误。在底层的hibernate级别发生了什么?
我希望最近创建的Person在并行闭包中可见。
Gpars是一个多线程工具,并且在您的域类中注入的hibernate会话不是线程安全的。
尝试使用以下方法或直接调用SessionFactory:
请注意,为每个线程打开一个会话可能会非常耗费成本,并且可能会使您的数据库充满新的连接。