您的位置:首页 > 编程语言 > Java开发

Spring和Hibernate整合事务配置之current_session_context_class

2018-01-11 10:25 513 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐