2014-10-18 51 views
1

从下列来源:hibernate transaction eg.事务对象在异常情况下有什么价值?

据撰文指出,一个典型的事务应该使用下面的语句:

Session sess = factory.openSession(); 
Transaction tx; 
try { 
    tx = sess.beginTransaction(); 
    //do some work 
    ... 
    tx.commit(); 
} 
catch (Exception e) { 
    if (tx!=null) tx.rollback(); 
    throw e; 
} 
finally { 
    sess.close(); 
} 

我的问题是什么TX对象有,如果它在catch块,即任何异常发生,这是tx.commit()的结果?如果是,那么怎么样,因为它什么都不返回。 我的意思是问tx的价值在何时何地发生变化?

Quesion 2)是否有必要开始transacion万一只读交易即选择的查询..

+0

,如果你在你的实体有些慵懒的集合或代理机构,并要使用它们,您需要一个选择交易(通过调用entity.getMyLazyList例如())。而我没有得到你的第一个问题 – Multisync 2014-10-18 20:47:46

回答

1
  1. 如果发生异常:

    TX = sess.beginTransaction();

    然后tx将为空,所以什么都不会发生。

    如果tx被分配后引发异常,则tx表示数据库事务挂钩。您应该始终回滚异常事务,因为某些数据库驱动程序可能不会自动执行。

  2. Yes, you should use transactions for read-only queries too

+0

什么是数据库事务钩?请详细说明?? – sagar 2014-10-19 09:56:55

+0

这是控制tx命令的数据库驱动程序特定方式:开始/提交/回滚 – 2014-10-19 10:23:04

相关问题