什么是Hibernate的Transaction.wasCommitted方法的替代品?

时间:2017-03-17 20:59:00

标签: java hibernate

我试图从旧版本的Hibernate(版本3)更新一些代码。它使用Hibernate 5中不再存在的Transaction接口的两种方法。

session.getTransaction().wasCommitted()
session.getTransaction().wasRolledBack()

Hibernate 5中的等价物是什么?

2 个答案:

答案 0 :(得分:7)

您似乎在寻找session.getTransaction().getStatus()。例如,

session.getTransaction().getStatus() == TransactionStatus.COMMITTED
session.getTransaction().getStatus() == TransactionStatus.ROLLED_BACK

您可能还需要检查the docs of TransactionStatus以查看相对精细的交易状态粒度,因为您可能需要或需要比上述更具包容性的替代品。另外,不要忽略TransactionStatus的方法,您可能会发现这些方法很有帮助。例如,

session.getTransaction().getStatus().isOneOf(
        TransactionStatus.MARKED_ROLLBACK,
        TransactionStatus.ROLLING_BACK,
        TransactionStatus.ROLLED_BACK)

答案 1 :(得分:1)

我在升级休眠模式时遇到了这个问题。这就是我修改代码的方式

Transaction trans = null;

提交交易后,我们可以检查其状态并以Boolean值返回true或false

  boolean wasCommitted=trans.getStatus().equals("ACTIVE")?true:false;

我们可能在Active和COMMITTED之间感到困惑,但我发现处于休眠状态的active与先前版本中的wasCommitted()等效。

ACTIVE,
    /**
     * The transaction has been completed successfully.
     */
    COMMITTED,
    /**
     * The transaction has been rolled back.
     */
    ROLLED_BACK,
    /**
     * The transaction has been marked for rollback only.
     */