【发布时间】:2018-09-27 10:16:06
【问题描述】:
上下文/设置
我们在带有 Spring 和 Hibernate 集成的应用程序中使用 open-session-in-conversation-filter 模式。
我们正在使用 Springs 声明式事务管理,使用 org.springframework.transaction.interceptor.TransactionProxyFactoryBean。
当应用程序收到请求时,我们会执行多个数据库活动(插入/更新),其中更新和插入单独刷新到数据库并提交事务。
问题
假设对于其中一个插入/更新,引发了数据库异常,休眠会话按预期关闭,因为会话处于无效状态。
即使在此之后,如果我不想返回请求并想继续我的请求并完成我无法完成的其他活动,因为会话已关闭并且通过此会话的任何后续调用都失败了,原因很明显。
我在编写解决方案时需要帮助,我可以关闭现有会话并打开一个新会话,并使用 TransactionSynchronizationManager 将最新会话附加到线程,但不知道如何执行此操作,因为我可能需要很多地方要在流程中执行此操作,是否有通用的方法来执行此操作?它甚至是正确的设计吗?
即使我实现了这一点,与前一个会话分离的实体如何才能自动附加到新会话,以便代理无缝工作?
【问题讨论】:
标签: java hibernate spring-mvc spring-transactions open-session-in-view