1

我正在尝试实施这篇很棒的博客文章中的建议,以使用 MySQL 在 grails 中进行批处理。我遇到的问题是在我的循环中包含对 session.clear() 的定期调用会导致 org.hibernate.LazyInitializationException 被抛出。在页面的评论部分有一个引用:

您关于可能导致 LIE 的第二点是绝对正确的。如果您在使用当前线程导入之外做其他事情,您需要确保在进行清除后将任何对象重新附加到会话。

但是我该怎么做呢?任何人都可以帮助我具体了解如何“在我完成清除后将任何对象重新附加到会话中?

我还对并行化数据库插入过程感兴趣,以便我可以利用多核处理器。任何人都可以提供有关如何在 Grails 中执行此操作的建议吗?

4

1 回答 1

1

Grails 有一些方法可以帮助解决这个问题(它们在幕后利用了 hibernate)。

如果您知道某个对象已分离,则可以使用attach方法重新连接它。

如果您在对象分离时对其进行了更改,则可以使用merge

如果出于某种原因,您不确定某个对象是否附加到会话,您可以使用链接文本方法来确定它是否存在。

也可能值得查看有关Session的 Hibernate 文档。

于 2010-08-06T03:36:21.467 回答