【问题标题】:What value does transaction object has in case of exception.?异常情况下事务对象有什么价值?
【发布时间】:2014-12-14 03:42:43
【问题描述】:

来自以下来源: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)是否有必要在只读事务的情况下开始事务,即选择查询..

【问题讨论】:

  • 如果您的实体中有一些惰性集合或代理实体并且您想使用它们(例如通过调用 entity.getMyLazyList()),您需要一个事务进行选择。我没有得到你的第一个问题

标签: java database hibernate jpa transactions


【解决方案1】:
  1. 如果异常发生在:

    tx = sess.beginTransaction();

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

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

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

【讨论】:

  • 什么是数据库事务挂钩??请详细说明??
  • 这是数据库驱动程序控制 tx 命令的特定方式:Begin/Commit/Rollback
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2017-11-23
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
相关资源
最近更新 更多