百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

Hibernate事务管理 以下哪点不是办公室事务管理的特征

yuyutoo 2024-10-16 15:45 6 浏览 0 评论

在Hibernate中,可以通过代码来操作管理事务,如通过

“Transaction tx=session.beginTransactiong();”

开启一个事务,持久化操作后,通过"tx.commit();" 提交事务;如果事务出现异常,又通过“tx.rollback();"操作来撤销事务(事务回滚)。

除了在代码中对事务开启,提交和回滚操作外,还可以在hibernate的配置文件中对事务进行配置。配置文件中,可以设置事务的隔离级别。其具体的配置方法是在hibernate.cfg.xml文件中的

<session-factory>标签元素中进行的。配置方法如下所示。

<!--

事务隔离级别

hibernate.connection.isolation = 4

1-- Read uncommitted isolation

2-- Read committed isolation

4-- Repeatable read isolation

8-- Serializable isolation

-->

<property name="hibernate.connection.isolation">4</property>

到这里我们已经设置了事务的隔离级别,那么我们在真正进行事务管理的时候,需要考虑事务的应用场景,也就是说我们的事务控制不应该是在DAO层实现的,应该在Service层实现,并且在Service中调用多个DAO实现一个业务逻辑的操作。具体操作如下显示:

其实最主要的是如何保证在Service中开启的事务时使用的Session对象和DAO中多个操作使用的是同一个Session对象。

其实有两种办法可以实现:

1. 可以在业务层获取到Session,并将Session作为参数传递给DAO。

2. 可以使用ThreadLocal将业务层获取的Session绑定到当前线程中,然后再DAO中获取Session的时候,都从当前线程中获取。

其实使用第二种方式肯定是最优方案,那么具体的实现已经不用我们来完成了,hibernate的内部已经将这个事情做完了。我们只需要完成一段配置即可。

Hibernate5中自身提供了三种管理Session对象的方法

Session对象的生命周期与本地线程绑定

Session对象的生命周期与JTA事务绑定

Hibernate委托程序管理Session对象的生命周期

在Hibernate的配置文件中,hibernate.current_session_context_class属性用于指定Session管理方式,可选值包括:

1. thread:Session对象的生命周期与本地线程绑定(推荐)

2. jta:Session对象的生命周期与JTA事务绑定

3. managed:hibernate委托程序来管理Session对象的生命周期。

在hibernate.cfg.xml中进行如下配置:

<!-- 配置session绑定本地线程 -->

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

Hibernate提供sessionFactory.getCurrentSession()创建一个session和ThreadLocal绑定方法。

在HibernateUtils工具类中更改getCurrentSession方法:

public static Session getCurrentSession() {

return sessionFactory.getCurrentSession();

}

而且Hibernate中提供的这个与线程绑定的session可以不用关闭,当线程执行结束后,就会自动关闭了。

所以最终的配置文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" >
 3 <hibernate-configuration>
 4 <session-factory>
 5 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 6 <property name="hibernate.connection.url">jdbc:mysql:///day24_db</property>
 7 <property name="hibernate.connection.username">root</property>
 8 <property name="hibernate.connection.password">toor</property>
 9 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
10 <property name="hibernate.show_sql">true</property>
11 <property name="hibernate.format_sql">true</property>
12 <property name="hibernate.hbm2ddl.auto">update</property>
13 <!-- 配置C3P0连接池 
14 <property name="connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
15 在连接池中可用的数据库连接的最少数目
16 <property name="c3p0.min_size">5</property>
17 在连接池中所有数据库连接的最大数目
18 <property name="c3p0.max_size">20</property>
19 设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于
20 空闲状态的时间超过了timeout时间,就会从连接池中清除
21 <property name="c3p0.timeout"></property>
22 每3000秒检查所有连接池中的空闲连接,以秒为单位
23 <property name="c3p0.idle_test_period">3000</property> -->
24 
25 <!-- 配置隔离级别 -->
26 <property name="hibernate.connection.isolation">4</property>
27 <!-- 配置session绑定本地线程 -->
28 <property name="hibernate.current_session_context_class">thread</property>
29 <mapping resource="cn/eagle/domain/Customer.hbm.xml" />
30 </session-factory>
31 </hibernate-configuration>
 1 package cn.eagle.utils;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6 
 7 public class HibernateUtils {
 8 
 9 private static final Configuration configuration;
10 private static final SessionFactory sessionFactory;
11 
12 static {
13 configuration = new Configuration().configure();
14 sessionFactory = configuration.buildSessionFactory();
15 }
16 
17 public static Session getCurrentSession() {
18 return sessionFactory.getCurrentSession();
19 }
20 }

相关推荐

pdf,word,ppt,rar,mp4等等文档在线预览

背景:移动端的智能化已经被大多数人接受了,但是有时一些文件格式要在移动端打开,需要安装特定的软件才行,这个就是很多人不喜欢的,要看个文档还要下载安装一个app,实在麻烦,那能不能直接在线就预览文件呢具...

Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像

一、前言用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw...

全能下载神器文件蜈蚣体验(全能文件王)

文件蜈蚣是一款开源免费的软件,在GitHub上公布了所有源代码,自身非常绿色环保,没有流氓后台也没广告,和莫名弹窗的同行相比,可算得上是一股清流。文件蜈蚣的使用很简单,解压后运行一次其中的exe,完成...

支持HLS和mp4在线播放的源码(hls支持的视频编码格式)

今天安利的一套在线视频播放源码,它不是安卓端,也不是PC端。你只需要部署一下这个单页面源码即可。使用php+mysql+nginx即可。任何版本都能运行。HLSDOWNLOAD网页打开服务器地址:1...

大模型微调知识与实践分享(模具微调结构)

一、微调相关知识介绍...

IOS遇到的几个H5坑、h5键盘弹起遮挡输入框的处理

一、IOS遇到的几个H5坑1、ios端兼容input光标高度  问题描述:input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上当点击输入的时候,光标的高度和父盒子的高度一样。例如下图,左...

实用技巧:如何在win10中安装没有管理员权限的软件

通常,我们可能会遇到需要在Windows10电脑上安装软件,但在该电脑上没有管理员权限的情况,由于不是管理员,所以无权在在电脑上安装软件,这让人非常苦恼。事实上,这是微软专门设计的一个安全功能,它的...

基于ENVI的Landsat 7遥感影像处理与多种大气校正方法对比

1数据导入与辐射定标关于数据的下载,网络中相关资源很多,这里不再赘述。...

在 Python 中为无服务器应用设计安全租户隔离

软件即服务(SaaS)已经成为当今一种非常普遍的软件交付方式。虽然这方便了用户访问,而且消除了用户的运营开销,但这也改变了以前的模式,将实现SLA以及现代云原生组织所期望的所有安全和数据隐私要求的...

基于JFinal的后台业务框架通用模块

jcbase是基于JFinal2.x的后台业务框架通用模块,包括系统权限模块、APP版本管理、日志管理、数据字典等使用的技术要点后端使用JFinal2.x前端页面是基于acev1.3模板改造的,更方便...

PHOTOSHOP图层技巧(掌握photoshop合并图层技巧)

你会图层吗?不会?喔,那你肯定不会PHOTOSHOP。为什么那么说呢?因为图层可以说是PHOTOSHOP的核心,几乎PHOTOSHOP所有的应用都是基于图层的,很多强劲的图像处理功能也是图层所提供的,...

Cadence Allegro背钻设置详细介绍教程

CadenceAllegro背钻设置详细介绍教程...

Pt中间层显著降低PEM水电解电子传输阻抗

在质子交换膜水电解(PEMWE)中,阳极OER的Ir基催化剂成本高昂,成为制约产业化的重要瓶颈。虽然非晶态IrOx具有高OER活性,但其电导率较差、与多孔钛PTL之间接触不良,往往导致催化剂层利用率低...

GIMP 教程:制作 Duotone 双色调效果

今天我们学习如何使用GIMP这款强大的开源图像编辑器,制作流行的Duotone(双色调)效果。Duotone效果的核心原理,是将图像的色调信息映射到两种主要颜色上。通常,一种颜色用于图像的亮部...

CAD打印的时候线条没了?原来是这些设置出了错

每当我们辛辛苦苦绘制完一张图纸之后,打印出图的时候总会出现各种各样的问题,不知道大家有没有遇到这种情况:在预览的时候还一切正常,但是打印出来之后就会发现很多线条都会不见了或者部分缺失。那么到底是怎么一...

取消回复欢迎 发表评论: