【发布时间】:2011-02-28 21:05:37
【问题描述】:
我正在开发一个部署在 Tomcat 上的 J2EE 服务器应用程序。我使用 Spring 源代码作为 MVC 框架,使用 Hibernate 作为 ORM 提供者。我的对象模型有很多惰性关系(根据请求获取依赖对象)。高级设计就像服务级方法调用一些DAO方法来执行数据库操作。从 Flex UI 或作为计划作业调用服务方法。当从 Flex UI 调用它时,服务方法工作正常,即它使用 DAO 方法获取一些对象,甚至延迟加载也能工作。这可以通过使用配置了 UI servlet 的 OpenSessionInViewFilter 来实现。
但是当调用同一个服务方法作为调度的 Job 时,它会给出 LazyInitializationException。我无法配置 OpenSessionInViewFilter,因为没有与之关联的 servlet 或 UI 请求。
我尝试围绕计划的作业方法配置事务,以便服务方法启动事务并且所有 DAO 方法都参与同一事务,希望事务将保持活动状态并且休眠会话将可用。但它不起作用。
请建议是否有人能够使这样的配置正常工作。如果需要,我可以发布 Hibernate 配置和日志消息。
非常感谢您的帮助!
史瑞郎
【问题讨论】:
-
您能发布一下您是如何围绕计划的作业包装事务的吗?哪个部分不工作 - 它没有打开交易还是交易过早关闭?
-
为了回答您的评论,我试图使用切入点表达式将计划的作业方法包装在它自己的新事务中。但是,切入点在开始执行时并没有真正选择我的方法,因此 Transaction 根本没有启动。
标签: hibernate spring lazy-loading