1.JDBC Transaction

??????Hibernate對于JDBC事務只是做了很簡單的封裝,JDBC事務管理也是Hibernate的默認事務管理方式,在Hibernate的所有操作都必須在事務中完成(甚至是Query),在sessionFactory.openSession()中,Hibernate會初始華數據庫的連接,同時,將AutoCommit設為關閉狀態(False)。所以如果代碼這樣:
???session =sessionFactory.openSession();
???session.save(customer);
???session.close();
????? 這樣對于數據庫是沒有任何影響的,因為AutoCommit=false,必須要Transaction.commit().
????? JDBC Transaction的操作如下:
?? session = sessionFactory.openSession();
???Transaction tx = session.beginTransaction();
?? ...
?? tx.commit();
???? 實際上對應的JDBC代碼為:
????Connection conn = getConnection();
??? conn.setAutoCommit(false);
??? ....
??? conn.commit();

2.JTA Transaction

???JTA事務管理是夸Session的,Hibernate的事務管理方式使得事務管理統一化,即調用形式和基于JDBC Transaction是一樣的,只要簡單的改寫配置文件即可。??
???對于非托管性的程序,事務的使用形式很簡單,只是beginTransaction()和commit或者rollback,而JTA的事務管理更加是和托管性的程序事務管理,在程序中可以無需添加任何的事務語句,所有的事務管理都放到配置文件中指定,有JTA容器統一管理。

4.悲觀鎖和樂觀鎖