Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装
Connection conn = ...; <--- session = sf.openSession();;
conn.setAutoCommit(false); <--- tx = session.beginTransactioin();;
... <--- ...
conn.commit(); <--- tx.commit();; (对应左边的两句);
conn.setAutoCommit(true);
conn.close(); <--- session.close();;
看明白了吧,Hibernate的JDBCTransaction根本就是conn.commit而已,根本毫无神秘可言,只不过在Hibernate中,Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写Transaction的话,数据库根本就没有反应