Hibernate事务处理机制--1
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的 Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装,下面我们详细的分析:
Hibernate可以配置为JDBCTransaction或者是JTATransaction,这取决于你在hibernate.properties中的配置:
#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory#hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory#hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
Session session = sf.openSession();Transaction tx = session.beginTransactioin();...session.flush();tx.commit();session.close();
net.sf.hibernate.transaction.JDBCTransaction:public void begin() throws HibernateException {...if (toggleAutoCommit) session.connection().setAutoCommit(false);...}public void commit() throws HibernateException { ...try {if ( session.getFlushMode()!=FlushMode.NEVER ) session.flush();try {session.connection().commit();committed = true;}...toggleAutoCommit();}Connection conn = ...; <--- session = sf.openSession();conn.setAutoCommit(false); <--- tx = session.beginTransactioin();... <--- ...conn.commit(); <--- tx.commit(); (对应左边的两句)conn.setAutoCommit(true);conn.close(); <--- session.close();