hibernate的事务管理和session对象的详解
//开启事务
transaction=session.beginTransaction();
上面为开启事务
transaction.commit();这个为提交事务
从session对象中获取事务后进行提交
下面可以自动提交事务,并且可以不需要对于这个事务进行提交,但是不推荐这样进行使用这个方法
session.doWork(new Work() {
//这里的connection对象就是jdbc中的对象
@Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
connection.setAutoCommit(true);//设置自动提交事务
}
});
在设置自动提交事务后必须对session进行刷新操作后才能有效
session.flush();//对于事务设成自动提交后需要对session进行刷新后才能使用
openSession 每次使用都是打开一个新的session,使用完需要调用close方法关闭session;如果不关闭会导致每次都打开一个connection对象,最后导致连接池溢出
getCurrentSession 是获取当前session对象,连续使用多次时,得到的session都是同一个对象,这就是与openSession的区别之一 ;
一般在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务,所以在一般情况下比较少使用openSession;
如何获得session对象???
(1)openSessionion
(2)getCurrentSession
如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
如果是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
package cn.lonecloud.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test; public class SessionTest { @Test
public void TestOpenSession() {
Configuration configuration = new Configuration().configure();// 获得配置文件对象
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();//获得服务注册对象
SessionFactory factory=configuration.buildSessionFactory(registry);//获得session工厂对象
Session session=factory.openSession();//获取session对象
if (session!=null) {
System.out.println("Session 创建成功");
}else {
System.out.println("Session 创建失败");
} }
//在使用getCurrentSession的时候必须在cfg配置文件中进行配置
// <!--设置当前的session对象的类型thead为当前的jdbc的session对象 -->
// <!-- 如果是本地事务(jdbc事务) -->
// <property name="hibernate.current_session_context_class">thread</property>
//<!-- 如果是全局事务(jta事务)
// <property name="hibernate.current_session_context_class">jta</property> -->
@Test
public void TestCurrentSession(){
Configuration configuration = new Configuration().configure();// 获得配置文件对象
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();//获得服务注册对象
SessionFactory factory=configuration.buildSessionFactory(registry);//获得session工厂对象
Session session=factory.getCurrentSession();//获取session对象
if (session!=null) {
System.out.println("Session 创建成功");
}else {
System.out.println("Session 创建失败");
}
}
}
hibernate的事务管理和session对象的详解的更多相关文章
- python web开发-flask中response,cookies,session对象使用详解
Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...
- Session和Cookie详解(1)
面试常问的有关session和cookie的问题: 1.session在分布式环境下怎么解决 2.集群下如何保证session踩中 3.cookie的大小 4.服务器怎么识别一个用户的 5.sessi ...
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- javascript event(事件对象)详解
javascript event(事件对象)详解 1. 事件对象 1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...
- 010-Scala单例对象、伴生对象实战详解
010-Scala单例对象.伴生对象实战详解 Scala单例对象详解 函数的最后一行是返回值 子项目 Scala伴生对象代码实战 object对象的私有成员可以直接被class伴生类访问,但是不可以被 ...
- openerp经典收藏 对象定义详解(转载)
对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...
- cookie 与 session 的区别详解
[转]cookie 与session 的区别详解 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当 ...
- Cookie,Session,Token详解
Cookie,Session,Token详解 Cookie : 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. Cookie由服务器生成,发 ...
- JAVA对象头详解(含32位虚拟机与64位虚拟机)
为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等. JAVA对象头 由于Java面向对象的思想,在JV ...
随机推荐
- 小打卡PRD
目标:打造一款不同于市场上的公开打卡app的产品 理念:通过监督和鼓励,和相同圈子的人一起互相鼓励.分享及监督,共同进步. 优点: 模板消息通知,网上基本通过小程序中逻辑层JS完成推送的请求,小打卡在 ...
- scrapy_图片下载
需要安装第三方库: 安装 pillow库 pip install -i https://pypi.doubanio.com/simple pillow 如何对图片进行自动下载? 首先明白,图片去哪下? ...
- crypto在web的使用
前言 crypto 在nodejs中是一个核心模块,虽然现在高等浏览器中也有了crypto全局对象(下图),它在nodejs中的使用与web端还是不同的. web端使用cryptojs 国外下载较慢, ...
- (纯代码)快速创建wcf rest 服务
因为有一个小工具需要和其它的业务对接数据,所以就试一下看能不能弄一个无需配置快速对接的方法出来,百(以)度(讹)过(传)后(讹),最后还是对照wcf配置对象调试出来了: 1.创建WebHttpBind ...
- css中 padding属性的数值赋予顺序为
4种可能的情况,举例说明:padding:10px; 四个内边距都是10pxpadding:5px 10px; 上下5px 左右10pxpadding:5px 10px 15px; 上5px 右10p ...
- JSP -java service pages
jsp的运行机制: 1客户端(请求jsp页面)------->JSP页面(转换为java源文件)------->Selvet文件(.java) (编译成相应的字节码文件也就是后缀名是.cl ...
- 【转】高斯-克吕格投影与UTM投影异同
高斯-克吕格(Gauss-Kruger)投影与UTM投影(Universal Transverse Mercator,通用横轴墨卡托投影)都是横轴墨卡托投影的变种,目前一些国外的软件或国外进口仪器的配 ...
- 【转】sed 学习笔记
一 . sed 简介 1 . 功能 sed 是一种流编辑器,所谓流编辑器是指能够对来自文件或者管道的输入流进行基本的文本转换的工具,比方说查找替换删除等. 2 . 最简单的运作机制 sed ...
- django的rest_framework框架源码剖析
在看源码之前先了解一下什么是rest,restful api. 什么是rest 可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则. REST是Representational S ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
前言 童鞋们,大家好 我是专注.NET开发者社区建设的实践者Rector. 首先,为自己间隔了两个星期五再更新本系列文章找个不充分的理由:Rector最近工作,家庭的各种事务所致,希望大家谅解. 本文 ...