我想念一些东西...

我有一个Grails网络流,看起来像这样:

def childFlow = {
        start {
            action {
                def targets = []
                Target.list().each {target ->
                    targets.add(new TargetCommand(name: target.name, id: target.id))
                }
                log.debug "targets are $targets"
                [children: targets]
            }
            on('success').to('selectChild')
        }
        ...

TargetCommand是可序列化的。但我得到这个错误:
Caused by: java.io.NotSerializableException: com.nerderg.groupie.donate.Target

由于某种原因,位于Target.list()。each {}闭包内的“目标”对象被放入流范围中,我不知道如何将其标记为 transient 。

我在Service中有一些代码,当我也不想让对象也放置在流作用域中时,它们会将对象放置在流作用域中。

如何停止在流范围内的闭包中的局部 transient 变量?

最佳答案

完善上面的答案而不是清除persistenceContext,我们只需要在完成实例后逐出实例即可,如下所示:

    Target.list().each {
        targets.add(new TargetCommand(name: it.name, id: it.id))
        flow.persistenceContext.evict(it)
    }

这仍然是无法解决的问题,因为无法将关闭变量标记为 transient

10-08 15:20