• hibernate--coreapi--configuration sessionfactory--getcurrentsession--opensession


    sessionfactory的目的:产生session,维护数据库连接池

    测试文件里的sessionfactory创建数据库连接,所以sessionFactory通过配置文件里的配置信息产生一个数据库连接池, 从中取出一个数据库连接.

    sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    

    configure用于调用数据库信息, configure()里面可以指定hibernate.cfg.xml的名字

    openSession() 永远是创建一个新的session, 此session需要close,

    而getCurrentSession()如果环境上下文中有session就拿环境中的, 没有就建新的, 不需要close.

    用getCurrentSession调用一个session:

    @Test
    	public void testTeacherSave() {	
    		Teacher t = new Teacher();		
    		t.setName("t1");
    		t.setTitle("middle");
    		t.setBirthDate(new Date());		
    		//Session session = sessionFactory.openSession();
    		Session session = sessionFactory.getCurrentSession();		
    		session.beginTransaction();
    		session.save(t);		
    		Session session2 = sessionFactory.getCurrentSession();		
    		System.out.println(session == session2);		
    		session.getTransaction().commit();		
    		Session session3 = sessionFactory.getCurrentSession();		
    		System.out.println(session == session3);		
    	}
    
    结果: 第一个 true, 第二个false
    因为第一个session被commit了
    getCurrentSession方法的用途:界定事务边界, 事务提交后自动close.
    在addUser的时候同时调用两个方法, 增加用户和增加日志, UserDAO,LogDAO,为了同步, 要使用同一个session
    上下文在hibernate.cfg.xml配置文件里有指定:
     <property name="current_session_context_class">thread</property>
    

    取值范围: jta,thread,managed,custom.class

    current_session_context_class有两种: jta, thread

    thread一般使用connection, 管理事务, auto_commit设为1, 无异常commit, 有异常rollback.

    但是有一种事务使用一个connection无法管理, 比如有个类要同时操作两个数据库, 需要事务管理器, TransactionManager来同时管理 两个数据库. TM由application server实现,  weblogic和jboss也可以但是tomcat本身不可以, 但是可以通过spring实现,

    此种事务就叫 JTA事务, 

    事务有两种, 一种是connection, 只针对一个数据库, 而JTA针对分布式数据库.

    JTA: JAVA Transaction API.   JPA: JAVA Persistence API. 

      

      

      

  • 相关阅读:
    vxlan 内核实现
    perf 系统调用
    quic NAT
    机器学习在ABR算法中的应用纵览
    清华最新AIOps案例:强化学习,降低网络传输延时
    内核gso
    怎么提高网络应用性能?让DPDK GRO和GSO来帮你!
    网卡VXLAN的offload技术介绍
    Matplotlib中的plt和ax画图的区别
    Task 3: 异常处理(2天)
  • 原文地址:https://www.cnblogs.com/wujixing/p/5414109.html
Copyright © 2020-2023  润新知