关闭

<property name="current_session_context_class">thread</property> 属性

标签: hibernatespring
734人阅读 评论(0) 收藏 举报
分类:
转载至:http://www.cnblogs.com/a757956132/p/4309364.html

<property name="current_session_context_class">thread</property>
这个属性的作用:这样配置是本地jdbc事务配置,你通过getCurrentSession创建的session会绑定到当前线程

平时在单独使用hibernate的时候,习惯于配置属性

<property name="current_session_context_class">thread</property>
根据文档,这个是hibernate3.1以后的一个新扩展,目的在于可以让我们在某一个上下文环境(比如说当前线程)中可以通过SessionFactory.getCurrentSession()得到同一个session会话.
 
后来当我们把spring,hibernate整合的时候,在spring的主配置文件当中,我们也习惯于带入这样的配置
<property name="hibernateProperties">
<props>
<prop key="hibernate.current_session_context_class">thread</prop>
,接下来在spring配置文件中,会使用spring2.x的声明式的方式来配置事务
<tx:advice id="txAdvice" transaction-manager="transactionManager">,<aop:pointcut,<aop:advisor等等配置指定哪些方法上由spring来管理hiberante的事务,这个时候我们试着运行一个类似于这样的方法
public void find() {
Session se = sf.getCurrentSession();
//此处不需要se.beginTransaction(),事务已经交由spring管理
Dept d = (Dept) se.get(Dept.class, new Long(12));
}
会得到一个异常: get is not valid without active transaction.
这个错误一般情况是因为由getCurrentSession得到的session中没有获得的transaction,我们一般要手动的调用se.beginTransaction(),来打开一个活动的事务.但是问题是,我们在spring的配置文件中不是已经通过aop,指定了此处由spring来管理事务吗,怎么还要手动处理事务?
 
答案: 
<prop key="hibernate.current_session_context_class">thread</prop>改为
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate3.SpringSessionContext</prop>(默认配置)
 
参考:
1. hibernate文档:
2.在hibernate中,thread,jta,manager的配置其实都是对应了3个hibernate的实现类
 
 
 3.在sessionFactory配置文件中
应将hibernate.current_session_context_class设为org.springframework.orm.hibernate3.SpringSessionContext(默认为此值)应当把session要绑定的上下文设置为由spring环境管理(因为我们的事务aop也是在spring范围中),这个时候spring中的事务配置才会起作用(当然,以前是thread上下文环境的session,而事务托管在spring上下文中,当然spring无法管理到thread上下文的session的事务咯)综上所述,其实仔细看ThreadLocalSessionContext,JTASessionContext,ManagedSessionContext,SpringSessionContext我们都会发现,他们都实现了一个接口org.hibernate.context.CurrentSessionContext关于这个接口,请参阅 org.hibernate.context.CurrentSessionContext 接口的 Javadoc,那里有关于它的契约的详细讨论。它定义了单一的方法,currentSession(),特定的实现用它来负责跟踪当前的上下文相关的会话 最后,我们知道,其实线程绑定也好,上下文绑定也好,最后都是,使用实现了CurrentSessionContext接口的一个类,来跟踪session,然后我们通过这个类的对象来获得被它跟踪的session,以达到在我们定义的上下文环境中调用getCurrentSession方法获得的总是同一个session
1
0
查看评论

hibernate的current_session_context_class配置

遇到过的问题: 情景1: 在使用SessionFactory的getCurrentSession方法时遇到如下错误,经过检查,原因如下: 是因为在hibernate.cfg.xml文件中忘记进行了如下设置: hibernate.current_session_context_class如果是...
  • Baple
  • Baple
  • 2014-10-10 09:54
  • 7143

<property name="current_session_context_class">thread</property>

转自:http://www.cnblogs.com/a757956132/p/4309364.html thread 这个属性的作用:这样配置是本地jdbc事务配置,你通过getCurrentSession创建的session会绑定到当前线程       ...
  • zcwforali
  • zcwforali
  • 2017-02-17 16:47
  • 324

java综合(六)hibernate.current_session_context_class配置

在前面一节"spring与Hibernate整合-事务"中,总是出现不存在激活事务的问题,结果去掉thread 但是,为什么呢? 那是因为在Spring事务管理中,current Session是绑定到SpringSessionContext中的,而不是ThreadLocalSessionConte...
  • naruto_Mr
  • naruto_Mr
  • 2015-08-29 10:52
  • 6809

还是spring中hibernate.current_session_context_class问题

public class SpringSessionContextextends Objectimplements org.hibernate.context.CurrentSessionContext Implementation of Hibernate 3.1's CurrentSe...
  • lmjq
  • lmjq
  • 2010-12-06 17:36
  • 3869

hibernate中的属性参数详解

C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。 C3P0的详细配置说明 头部的说明
  • chushoutaizhong
  • chushoutaizhong
  • 2016-07-19 11:36
  • 747

jaxb 的使用介绍[转载]

什么是jaxb?http://java.sun.com/xml/jaxb/about.html主要能干什么?当人们需要用java应用程序来访问数据库的时候,jdbc诞生了当人们觉得频繁的jdbc操作很繁琐的时候,o/r mapping诞生了当人们需要用java操作xml的时候,sax, dom诞生了...
  • ozzy_003
  • ozzy_003
  • 2010-09-17 15:20
  • 3480

mapperLocations属性通配符的使用

mapperLocations属性通配符的使用 示例: [html] view plain copy bean id="sqlSessionFactory" class="...
  • zengmingen
  • zengmingen
  • 2016-07-19 11:40
  • 2929

hibernate中property属性详解

name="name" 属性的名称,必选属性 column="" 可选的字段,如果不填写则默认的和字段名称相同。     access="field"     ...
  • chenpeng19910926
  • chenpeng19910926
  • 2015-10-29 13:17
  • 3724

总结Spring Set注入方式及对property标签的理解

Spring依赖注入主要的方式:1.Set方法注入;2.
  • yuexuanyu
  • yuexuanyu
  • 2014-04-25 14:56
  • 8187

rsyslog 读取文件名 rsyslog 读取文件名: property(name="$!metadata!filename")

rsyslog 读取文件名: [root@node01 log]# cat /etc/rsyslog.conf module(load="imfile") #template(name="remote" type="string" ...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2017-07-24 18:02
  • 204
    个人资料
    • 访问:18241次
    • 积分:517
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:14篇
    • 译文:0篇
    • 评论:3条
    最新评论