【发布时间】:2011-06-22 03:22:48
【问题描述】:
我在 spring 中设置了一个 tx-advice 来围绕我的 Service 方法包装一个事务。所以说在我的批处理类中,我调用一个服务方法来加载对象列表并将其返回给我的批处理类。然后在我的批处理类中,我调用一个服务方法来处理每个对象。但是,如果该服务方法尝试访问对象的延迟加载属性,我将收到延迟加载异常,因为该对象列表是使用不同的休眠会话加载的。
因此,一种可能不是最佳的解决方法是 - 批处理类只是调用一个服务来加载这些对象的所有 ID(长值) - 我们将此 ID 传递给一个服务方法,该方法将加载它通过 ID 从数据库中获取对象,然后对其进行处理。
对此有什么想法?
我遇到的另一个问题是,如果这些对象中的每一个都相互独立,我应该还是不应该一次保存每个对象,而不是一次保存所有对象或批量保存它们。如果有 5000 条记录,那么在调用保存/更新/插入时应用程序似乎会减慢很多,因为它仍在 Hibernate 会话中的内存中执行所有这些操作。但是,如果我改为保存/更新/插入每条记录(一次处理一个 ID),然后在使用该对象完成后提交,然后再转到下一个,它似乎加快了很多。此外,如果我批量处理它,比如每 200 条甚至一次全部 5000 条,如果一条记录无法插入/更新并出现错误,则不会保留任何内容并且一切都会回滚。
处理此类事情的最佳做法是什么?似乎真的很常见。谢谢
【问题讨论】:
标签: java hibernate spring session transactions