//开启事务
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 创建失败");
}
}
}

最新文章

  1. CSS样式表基础
  2. MySQL操作汇总[转]
  3. [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程
  4. OpenStack collectd的从零安装服务端
  5. CGAffineTransformMakeTranslation和CGAffineTransformTranslate
  6. C++重要知识点小结---1
  7. document.createElement()的用法
  8. SpringMVC基础学习(一)&mdash;初识SpringMVC
  9. linux虚拟机局域网网卡配置
  10. flask_login 整合 pyjwt + json 简易flask框架
  11. permu(变态考试题)
  12. antlr v4 使用指南连载1——简介
  13. 信息论随笔3: 交叉熵与TF-IDF模型
  14. pycharm的list中copy的应用
  15. Python-lambda表达式和推导式
  16. [NOIp2016] 蚯蚓
  17. HDU 6374(拼三角形 **)
  18. poi读取excel内容工具类
  19. 配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
  20. 关于 Web Api 2 认证与授权

热门文章

  1. kafka学习
  2. Django_实现分页
  3. 函数式编程--lambda表达式对比匿名内部类
  4. Linux平台ORACLE INSTANT客户端安装
  5. nagios的安装
  6. 正则匹配url中的query参数信息
  7. Struts2的配置和一个简单的例子
  8. 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?
  9. 洛谷 [P1280] 尼克的任务
  10. 3167: [Heoi2013]Sao [树形DP]