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