来自以下来源: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)在只读事务(即选择查询)的情况下是否有必要开始交易..
答案 0 :(得分:1)
如果异常发生在:
tx = sess.beginTransaction();
然后tx将为null,因此不会发生任何事情。
如果在分配tx后抛出异常,则tx表示数据库事务挂钩。您应该始终回滚异常事务,因为某些数据库驱动程序可能不会自动执行此操作。