gpt4 book ai didi

hibernate - 如何解决计划作业中的 LazyInitializationException?

转载 作者:行者123 更新时间:2023-12-05 00:41:22 26 4
gpt4 key购买 nike

我正在开发一个部署在 Tomcat 上的 J2EE 服务器应用程序。我使用 Spring 源作为 MVC 框架,使用 Hibernate 作为 ORM 提供者。我的对象模型有很多惰性关系(根据请求获取依赖对象)。高级设计就像服务级方法调用一些 DAO 方法来执行数据库操作。服务方法从 Flex UI 或作为计划作业调用。当它从 Flex UI 调用时,服务方法工作正常,即它使用 DAO 方法获取一些对象,甚至延迟加载工作。这可以通过使用由 UI servlet 配置的 OpenSessionInViewFilter 来实现。

但是当相同的服务方法作为预定的Job 被调用时,它会给出LazyInitializationException。我无法配置 OpenSessionInViewFilter,因为没有与之关联的 servlet 或 UI 请求。

我尝试围绕计划作业方法配置事务,以便服务方法启动事务并且所有 DAO 方法都参与同一事务,希望事务保持事件状态并且 hibernate session 可用。但它不起作用。

请建议是否有人曾经能够使这样的配置工作。如果需要,我可以发布 Hibernate 配置和日志消息。

非常感谢您的帮助!

雪兰

最佳答案

最后,在阅读了 Spring Transaction 引用资料后,我能够解决我的问题。
早些时候,我试图编写一个切入点表达式来在事务中运行我的预定 jon。但是切入点使用的是 OR (||) 并且在它开始执行时以某种方式没有采用我的方法。因此交易从未打开。 (我已经为我的 DAO 方法提供了一个有效的切入点表达式,并且我试图在该切入点中添加我的计划方法。)

然后我找到了一种以编程方式打开交易的方法,该交易解决了我的问题。为了他人的利益,这里是执行此操作的代码片段:

       transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
// Invoke the real method inside transaction context
doWork();
}
});

详情请咨询 TransactionTemplate请在此处引用 Spring Source 文档:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction-programmatic

关于hibernate - 如何解决计划作业中的 LazyInitializationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2992692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com