Spring和Hibernate整合事务配置之current_session_context_class

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QianZhaoVic/article/details/79031168
hibernate.current_session_context_class设置
原来配置事务模式:
<prop key="hibernate.current_session_context_class">thread</prop>
会出现不存在激活的事务现象,主要原因是由于咋Spring管理事务中current session是绑定下springsessioncontext中的,而不是绑定在threadlocalsessioncontext中的。
hibernate.current_session_context_class常用3种配置: jta,thread,org.springframework.orm.hibernate4.SpringSessionContext

hibernate.current_session_context_class=thread
实质是:
hibernate.current_session_context_class=  org.hibernate.context.internal.ThreadLocalSessionContext
org.hibernate.context.internal.ThreadLocalSessionContext  - 当前session通过当前执行的线程来跟踪和界定。
 
同理:
hibernate.current_session_context_class=jta
实质是:
hibernate.current_session_context_class=  org.hibernate.context.internal.JTASessionContext
org.hibernate.context.internal.JTASessionContext - 当前session根据JTA来跟踪和界定。这和以前的仅支持JTA的方法是完全一样的。

同理
hibernate.current_session_context_class= org.springframework.orm.hibernate4.SpringSessionContext
实质是
Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session,此时应配置:
hibernate.current_session_context_class= org.springframework.orm.hibernate4.SpringSessionContext
spring 整合hibernate管理事务后,由Spring的TransactionManager管理事务后, currentSession是绑定到SpringSessionContext的,而不是thread。
此时hibernate.current_session_context_class应该是SpringSessionContext,而它又会在使用LocalSessionFactoryBean时自动的设置。
所以就不需要你去设置current_session_context_class



猜你喜欢

转载自blog.csdn.net/QianZhaoVic/article/details/79031168