如果发生异常,事务对象有什么价值。

时间:2014-10-18 19:56:27

标签: java database hibernate jpa transactions

来自以下来源: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的值何时何地发生变化以及是什么?

问题2)在只读事务(即选择查询)的情况下是否有必要开始交易..

1 个答案:

答案 0 :(得分:1)

  1. 如果异常发生在:

    tx = sess.beginTransaction();

    然后tx将为null,因此不会发生任何事情。

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

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