zoukankan      html  css  js  c++  java
  • Hibernate事务操作

    Hibernate事务操作

    事务相关概念

    1 什么是事务

    2 事务特性

    3 不考虑隔离性产生问题

    (1)脏读

    (2)不可重复读

    (3)虚读

    4 设置事务隔离级别

    (1)mysql默认隔离级别 repeatable read

    Hibernate事务代码规范写法

    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不需要关闭,工具类中,静态代码块只执行一次。此处为单元测试。

    Hibernate绑定session

    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
    
  • 相关阅读:
    sql 生成javabean实体
    git 安装 使用过程遇到的问题
    CentOS7 ab压力测试安装
    Lvs+keepalived+mysql(主从复制)
    liunx下tomcat启动 Cannot find ./catalina.sh
    ftp和ssh登录缓慢的解决办法
    Contos7 FTP 安装步骤
    python生成100以内格式化的数
    Windows中更新python模块的命令
    scrapy的User-Agent中间件、代理IP中间件、cookies设置、多个爬虫自定义settings设置
  • 原文地址:https://www.cnblogs.com/sunyanblog/p/12724761.html
Copyright © 2011-2022 走看看