【问题标题】:grails and mysql batch processinggrails和mysql批处理
【发布时间】:2011-03-26 01:16:30
【问题描述】:

我正在尝试实施this great blog post for batch processing in grails with MySQL 中的建议。我遇到的问题是在我的循环中包含对 session.clear() 的定期调用会导致 org.hibernate.LazyInitializationException 被抛出。在页面的 cmets 部分有一个引用:

你是关于潜在的第二点 导致 LIE 是绝对正确的。如果 你在做其他事情 使用当前线程导入, 您需要确保重新连接 之后会话的任何对象 你正在清理。

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

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

【问题讨论】:

    标签: mysql hibernate grails batch-processing


    【解决方案1】:

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

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

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

    如果由于某种原因,您不确定某个对象是否已附加到会话,您可以使用link text 方法来确定它是否存在。

    也许还值得查看Session 上的 Hibernate 文档。

    【讨论】:

    • 感谢您的回复。对于如何确定需要重新附加哪些对象,您有什么建议吗?
    • @vicatu 不幸的是,它可能取决于解决方案,这取决于您在 clear() 期间可能分离了哪些对象。您可以尝试的另一件事是,您可以驱逐您在会话中使用的特定域对象,而不是强力清除会话。我还没有尝试过的另一件事是 GORM (grails.org/doc/latest/ref/Domain%20Classes/withNewSession.html) 中的新“withNewSession”方法。当我最初写这篇文章时它并不存在,但它可能是一个更好的方式来包装你的交易并在之后清理。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2013-12-15
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多