版权声明:本文为博主原创文章,未经博主允许不得转载。 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