我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hibernate事务管理机制是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hibernate事务管理机制是什么

本篇内容主要讲解“Hibernate事务管理机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate事务管理机制是什么”吧!

JTA 提供了跨Session 的事务管理能力。这一点是与JDBC Transaction ***的差异。JDBC 事务由Connnection管理,也就是说,事务管理实际上是在JDBC Connection中实现。事务周期限于Connection的生命周期之类。同样,对于基于JDBC Transaction的Hibernate事务管理机制而言,事务管理在Session 所依托的JDBC Connection中实现,事务周期限于Session的生命周期。

JTA事务管理则由 JTA 容器实现,JTA 容器对当前加入事务的众多Connection 进行调度,实现其事务性要求。JTA的事务周期可横跨多个JDBC Connection生命周期。同样对于基于JTA事务的Hibernate而言,JTA事务横跨可横跨多个Session。JTA 事务是由JTA Container 维护,而参与事务的Connection无需对事务管理进行干涉。这也就是说,如果采用JTA Transaction,我们不应该再调用HibernateTransaction功能。

上面基于JDBC Transaction的正确代码,这里就会产生问题:

public class ClassA{  public void saveUser(User user){  session = sessionFactory.openSession();  Transaction tx = session.beginTransaction();  session.save(user);  tx.commit();  session.close();  }  }  public class ClassB{  public void saveOrder(Order order){  session = sessionFactory.openSession();  Transaction tx = session.beginTransaction();  session.save(order);  tx.commit();  session.close();  }  }  public class ClassC{  public void save(){  ……  UserTransaction tx = new InitialContext().lookup(“……”);  ClassA.save(user);  ClassB.save(order);  tx.commit();  ……  }  }

这里有两个类ClassA和ClassB,分别提供了两个方法:saveUsersaveOrder,用于保存用户信息和订单信息。在ClassC中,我们接连调用了ClassA.saveUser方法和ClassB.saveOrder 方法,同时引入了JTA 中的UserTransaction 以实现ClassC.save方法中的事务性。问题出现了,ClassA 和ClassB 中分别都调用了Hibernate 的Transaction 功能。在Hibernate 的JTA 封装中,Session.beginTransaction 同样也执行了InitialContext.lookup方法获取UserTransaction实例,Transaction.commit方法同样也调用了UserTransaction.commit方法。

实际上,这就形成了两个嵌套式的JTA Transaction:ClassC 申明了一个事务,而在ClassC 事务周期内,ClassA 和ClassB也企图申明自己的事务,这将导致运行期错误。因此,如果决定采用JTA Transaction,应避免再重复调用Hibernate 的Transaction功能,上面的代码修改如下:

public class ClassA{  public void save(TUser user){  session = sessionFactory.openSession();  session.save(user);  session.close();  }  ……  }  public class ClassB{  public void save (Order order){  session = sessionFactory.openSession();  session.save(order);  session.close();  }  ……  }  public class ClassC{  public void save(){  ……  UserTransaction tx = new InitialContext().lookup(“……”);  classA.save(user);  classB.save(order);  tx.commit();  ……  }  }

上面代码中的ClassC.save方法,也可以改成这样:

public class ClassC{  public void save(){  ……  session = sessionFactory.openSession();  Transaction tx = session.beginTransaction();  classA.save(user);  classB.save(order);  tx.commit();  ……  }  }

实际上,这是利用Hibernate来完成启动和提交UserTransaction的功能,但这样的做法比原本直接通过InitialContext获取UserTransaction 的做法消耗了更多的资源,得不偿失。

在EJB 中使用JTA Transaction 无疑最为简便,我们只需要将save 方法配置为JTA事务支持即可,无需显式申明任何事务,下面是一个Session Bean的save方法,它的事务属性被申明为“Required”,EJB容器将自动维护此方法执行过程中的事务:

    public void save(){     //EJB环境中,通过部署配置即可实现事务申明,而无需显式调用事务     classA.save(user);     classB.save(log);     }  //方法结束时,如果没有异常发生,则事务由EJB容器自动提交。

到此,相信大家对“Hibernate事务管理机制是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hibernate事务管理机制是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Hibernate事务管理机制是什么

本篇内容主要讲解“Hibernate事务管理机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate事务管理机制是什么”吧!JTA 提供了跨Session 的事务管理能力。这一
2023-06-17

如何理解Spring的Hibernate事务管理机制

如何理解Spring的Hibernate事务管理机制,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。主要讲了Spring 声明式事务让我们从复杂的Hibernate事务处理中
2023-06-17

PostgreSQL的事务管理机制是什么

PostgreSQL的事务管理机制是基于ACID(原子性、一致性、隔离性、持久性)特性的。它支持事务的原子性,即事务中的所有操作要么全部成功提交,要么全部失败回滚;一致性,即事务执行前后数据库的状态保持一致;隔离性,即多个事务之间应该是相互
PostgreSQL的事务管理机制是什么
2024-04-09

Hibernate事务处理机制(转)

Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transacti
2023-06-03

Hibernate flush机制的原理是什么

本篇内容介绍了“Hibernate flush机制的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!针对昨天同事遇到的hiberna
2023-06-17

Hibernate JDBC事务是什么

这篇文章主要介绍“Hibernate JDBC事务是什么”,在日常操作中,相信很多人在Hibernate JDBC事务是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate JDBC事务是什么
2023-06-17

Hibernate延迟加载机制是什么

本篇内容主要讲解“Hibernate延迟加载机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate延迟加载机制是什么”吧!延迟加载机制是为了避免一些无谓的性能开销而提出来的,
2023-06-17

hibernate二级缓存机制是什么

Hibernate二级缓存机制是指在Hibernate框架中,通过配置第二级缓存来缓存对象的持久化状态,提高数据库访问性能。Hibernate的一级缓存是默认开启的,即Session级别的缓存。而二级缓存是可选开启的,是应用程序级别的缓存。
2023-08-24

android事件处理机制是什么

Android事件处理机制指的是Android系统中对用户输入事件以及其他系统事件的处理方式。Android系统中的事件处理机制主要包括以下几个部分:1. 事件触发:Android系统通过底层硬件驱动来获取用户输入事件,包括触摸事件、按键事
2023-08-11

python内存管理机制是什么

Python内存管理机制是自动化的。Python使用引用计数来跟踪和回收对象的内存。每个对象都有一个引用计数,当引用计数减少到0时,对象就会被自动回收。除了引用计数,Python还使用垃圾收集器来检测和回收不再被引用的循环引用对象。垃圾收集
2023-08-31

go内存管理机制是什么

Go语言的内存管理机制是基于垃圾回收(Garbage Collection)的。Go语言中的内存管理是由垃圾回收器负责的,它会自动跟踪和释放不再使用的内存,以避免内存泄漏和野指针等问题。Go语言的垃圾回收器使用了标记-清除(Mark a
2023-10-27

CLR内存管理机制是什么

这篇文章主要介绍“CLR内存管理机制是什么”,在日常操作中,相信很多人在CLR内存管理机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CLR内存管理机制是什么”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-17

android内存管理机制是什么

Android的内存管理机制是一种动态的机制,主要包括以下几个方面:1. 内存分配:Android使用堆来分配内存。堆是一个运行时数据区域,用于存放对象实例。Android的堆分为两个部分:Java堆和Native堆。Java堆用于Java
2023-09-13

unity内存管理机制是什么

Unity的内存管理机制是自动化管理的。Unity使用了一种称为垃圾回收(Garbage Collection)的技术来自动管理和释放内存。在Unity中,当您创建、加载或销毁游戏对象、资源或脚本实例时,Unity会自动跟踪和管理这些对象
2023-10-27

Python中什么是内存管理机制

本篇文章给大家分享的是有关Python中什么是内存管理机制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的数据类型有哪些?python的数据类型:1. 数字类型,包
2023-06-14

Redis的内存管理机制是什么

Redis使用一种称为"内存驱动"的内存管理机制。该机制将所有数据存储在内存中,并通过使用LRU算法(最近最少使用)来管理内存中的数据。当内存达到设定的阈值时,Redis会根据LRU算法淘汰一些数据以释放空间。此外,Redis还可以通过将数
Redis的内存管理机制是什么
2024-05-07

Tomcat中的Session管理机制是什么

Tomcat中的Session管理机制是通过Servlet容器来管理Session对象的。Tomcat会为每个用户创建一个Session对象,用于存储用户的会话信息,并为每个Session对象分配一个唯一的标识符,称为Session ID。
Tomcat中的Session管理机制是什么
2024-04-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录