事务的概念
事务:指一个单元的工作,这些工作要么全做,要么全部不做。
在Hibernate中使用事务
Hibernate本身并不具备事务管理能力。Hibernate对JDBC进行了轻量级的封装。Hibernate将底层的JDBCTransaction和JTATransaction进行了封装,再在外面套上Transaction,其实是通过委托底层的JDBC或JTA来实现事务处理功能的。
hibernate事务配置
在配置文件中,需设置相应的hibernate的事务工厂类。如果不进行配置,hibernate默认系统使用JDBC事务。
<hibernate-configuration>
<session-factory>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionoFactory</property>
<!-- <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionoFactory</property> -->
... ...
</session-factory>
</hibernate-configuration>
1、 在hibernate中使用事务的步骤
Transaction t = session.beginTransaction();
t.commit();
t.rollback();
2、 在hibernate中使用JDBC事务
hibernate在Session控制下,在建立数据库连接后,就立刻取消自动提交模式,即Hibernate在执行Session的beginTransaction()方法后,就自动调用JDBC层的setAutoCommint(false);方法。
这也就是说,我们一开始从SessionFactory获得的session,其自动提交属性就已经被关闭(AutoCommit=false),下面的代码将不会对数据库产生任何效果:
session = sessionFactory.openSession();
session.save(user);
session.close();
//在hibernate中使用JDBC事务
public static void saveObject(Object obj){
Session session = null;
Transaction t = null;
try{
session = HibernateSessionFactory.getSession();
t = session.beginTransaction();
session.save(obj);
t.commit();
t = null;
session.close();
}catch(Exception e){
if(t != null)
t.rollback(); //保存失败,回滚事务
throw e;
}finally(session != null){
session.close();
}
}
3、在hibernate中使用JTA事务
JTA 提供了跨Session 的事务管理能力(跨数据库)。这一点是与JDBC Transaction 最大的差异。
try{
tx.begin();
//多个数据库的session操作;
//session1….
//session2….
tx.commit();
}catch(Exception e){
tx.rollback(); throw e;
}
hibernate事务相关文章:http://www.iteye.com/topic/177988