如何在休眠状态下在事务中使用session.flush()

时间:2019-04-12 03:43:54

标签: hibernate jpa transactions

我正在将休眠从3.X迁移到休眠版本5.4.2。进行刷新操作时出现以下错误

javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:398)
    at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3619)
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1474)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1470)

设置值hibernate.allow_update_outside_transaction=true后,它可以正常工作。 我不想使用hibernate.allow_update_outside_transaction=true.属性,因为它违反原子性概念。有什么方法可以在事务内运行冲洗。

1 个答案:

答案 0 :(得分:-1)

不,不可能。

如果您未设置hibernate.allow_update_outside_transaction=true,则默认为false,并拒绝事务边界之外的任何更新操作。甚至可以通过异常的名称看到这一点。

但是为什么hibernate.allow_update_outside_transaction=true属性违反原子性概念?相反,原子性的概念假定该组操作将以原子方式执行,即完全成功或完全失败。事务只是提供了这种原子性。