1 什么是事务
2 事务特性
3 不考虑隔离性产生问题
(1)脏读
(2)不可重复读
(3)虚读
4 设置事务隔离级别
(1)mysql默认隔离级别 repeatable read
1 代码结构
try {
  开启事务
  提交事务
} catch() {
  回滚事务
} finally {
  关闭
}
	@Test
	public void testTx() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;	
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			// 开启事务
			transaction = session.beginTransaction();
			// 添加
			User user = new User();
			user.setUsername("张三");
			user.setPassword("456");
			user.setAddress("长沙");
			session.save(user);
			// 提交事务
			transaction.commit();
		} catch (Exception e) {
			e.printStackTrace();
			// 回滚事务
			transaction.rollback();
		} finally {
			// 关闭资源
			session.close();
			sessionFactory.close();
		}
	}
在项目中SessionFactory不需要关闭,工具类中,静态代码块只执行一次。此处为单元测试。
1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal
2 帮实现与本地线程绑定session
3 获取与本地线程session
(1)在hibernate核心配置文件中配置
<property name="hibernate.current_session_context_class">thread</property>
(2)调用sessionFactory里面的方法得到
	//提供返回与本地线程绑定的方法	
	public static Session getSessionObject() {
		return sessionFactory.getCurrentSession();
	}
		Session session = null;
		Transaction transaction = null;	
		try {
			session = HibernateUtils.getSessionObject();
			// 开启事务
			transaction = session.beginTransaction();
			// 添加
			User user = new User();
			user.setUsername("李四");
			user.setPassword("111");
			user.setAddress("长沙");
			session.save(user);
			// 提交事务
			transaction.commit();
		} catch (Exception e) {
			e.printStackTrace();
			// 回滚事务
			transaction.rollback();
		} finally {
			// 关闭资源
//			session.close();
//			sessionFactory.close();
		}
4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了
org.hibernate.SessionException: Session was already closed
原文:https://www.cnblogs.com/sunyanblog/p/12724761.html