在Hibernate API中,Session和Transaction接口提供了以下声明事务边界的方法:
- 声明事务的开始边界:
1 Transaction tx = session.beginTransaction();
以上方法完成两个任务:
1,为Session对象分配数据库连接,并且自动把这个连接设为手工提交事务模式。Hibernate的底层实现会自动调用代表数据库连接的java.sql.Connection对象的setAutoCommit(false)方法。
2,开始一个新的事务。Session的beginTransaction()方法返回的类型是由Hibernate配置文件中的hibernate.transaction.factory_class事务工厂属性决定的,该属性的默认值为org.hibernate.transaction.JDBCTransactionFactory。JDBCTransactionFactory表示JDBC事务工厂,它负责创建JDBCTransaction类的实例。因此,默认情况下,Session的beginTransaction()方法返回JDBCTransaction实例。
- 提交事务
1 tx.commit();
以上方法完成两个任务:
1,在默认情况下,Session采用自动清理缓存模式,在这种情况下,commit()方法会先自动调用Session的flush()方法清理缓存,即按照Session缓存中对象的变化去同步更新数据库。
2,向底层数据库提交事务。
3,释放Session占有的数据库连接。
- 撤销事务
1 tx.rollback();
以上方法立即撤销事务,并且释放Session占用的数据库连接。