hibernate openSession和getCurrentSession

8 篇文章 0 订阅
5 篇文章 0 订阅
开启一个Session 的两种方式:

    1.openSession:每次都是一个新的Session
    2.getCurrentSession:如果当前有session,就用当前的,否则新建一个
        2.1.用途:界定事务边界
        2.2. 在事务提交的时候自动close
        2.3.必须在配置文件中配置,这个属性可以再文档中查找

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

        如果配置文件中没有设置,运行时会报异常No CurrentSessionContext configured,getCurrentSession是hibernate3.0以后加进去的新API,通过查看hibernate文档,我们可以知道hibernate默认是jta事务管理,所以单独用java应用程序测试是会报这样的异常的

还有一个问题:

假定SessionFactory实例已经被创建

     Session session1=sessionFactory.openSession();

     Session session2=sessionFactory.getCurrentSession();

     System.out.println(session1==session2);//结果为false

原因:Session是一个接口,可能两个方法返回的是不同实现,具体得看hibernate源码才能知道

如果把好几个数据库操作放在同一个事务中,光靠数据库本身的connection管理根本不行,往往需要别人给你做一个事务管理器(TransactionManager)(记录对数据库的操作)
如果其中第二个数据库的操作出错,就让让第一个数据库回滚     XADriver驱动(支持对不同数据库操作)
TransactionManager有应用程序服务器提供,tomcat目前还不支持,不过可以通过spring来实现,weblogic可以,jboss可以
依赖于数据库本身,是Connection事务
分布式的数据库处理,依赖于应用程序服务器,叫jta事务
jta(java transaction API)                    
            



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值