[英]Multiple transactions in a single hibernate session (with Spring)
是否可以使用Hibernate + Spring对以下内容进行建模。
我使用Spring TransactionTemplate来执行会话+事务生命周期范围。
原因是有时我在业务流程中有几个阶段,我想在每个阶段完成后提交。 但是我想继续使用相同的持久对象。 如果我每个事务都有一个单独的会话,那么我会得到瞬态/分离异常,因为原始会话已关闭。
这可能吗?
是的,Hibernate的会话可以开始并提交多个事务。 你需要做的是在某个地方存储开放会话,然后重复使用它。 注意,Session不是一个线程安全的对象,但如果您确定它不会出现并发问题,那么您需要的只是使用TransactionSynchronizationUtils
将会话绑定到线程资源,然后在需要时取消绑定,你可以在这里找到一个例子,或者你可以看看OSIV及其标准实现。
这是一个非常复杂的事情,它更容易,因此您希望立即关闭会话并且不重复使用它,因为它可能带来麻烦:
您可以使用OpenSessionInView模式实现此目的。 Spring提供了一个javax.servlet.Filter实现,如果你在servlet环境中工作,你可以使用它(问题没有这么说)。 这将确保您的Hibernate会话在请求期间保持打开,而不仅仅是针对单个事务。
这个类的Javadoc非常全面,可能是一个很好的起点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.