Hibernate事务操作
2021-03-21 10:26
标签:单元测试 lang class 设置 nec 关闭 长沙 stat 需要 1 什么是事务 2 事务特性 3 不考虑隔离性产生问题 (1)脏读 (2)不可重复读 (3)虚读 4 设置事务隔离级别 (1)mysql默认隔离级别 repeatable read 1 代码结构 在项目中SessionFactory不需要关闭,工具类中,静态代码块只执行一次。此处为单元测试。 1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal 2 帮实现与本地线程绑定session 3 获取与本地线程session (1)在hibernate核心配置文件中配置 (2)调用sessionFactory里面的方法得到 4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了 Hibernate事务操作 标签:单元测试 lang class 设置 nec 关闭 长沙 stat 需要 原文地址:https://www.cnblogs.com/sunyanblog/p/12724761.htmlHibernate事务操作
事务相关概念
Hibernate事务代码规范写法
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();
}
}
Hibernate绑定session
//提供返回与本地线程绑定的方法
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();
}
org.hibernate.SessionException: Session was already closed