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.悲观锁和乐观锁