gpt4 book ai didi

java - JPA/@PostPersist @PostUpdate - 交易

转载 作者:太空狗 更新时间:2023-10-29 22:39:16 32 4
gpt4 key购买 nike

我目前正在使用 @PostPersist@PostUpdate,在这些触发器中我正在持久化其他实体。问题是,这些触发器是否在同一事务中,如果不是,是否可以强制执行?

对我来说,它是这样工作的。当我查看日志时,事务不存在(它是在触发器启动之前提交的)这阻止了我(在注入(inject) bean 的持久方法上没有 REQUIRES_NEW )将其他实体保存在数据库。REQUIRED 属性被完全忽略,MANDATORY 属性不抛出异常。

这可能是 JUnit 的问题(因为我处于开发阶段并且没有在完整环境中测试行为。)?

如果无法在此触发器上扩展事务,如何确保回滚发生在 @PostPersist@PostUpdate 之前,这些操作也将被回滚.

最佳答案

如果您使用的是 Spring,您总是可以向当前的事务管理器注册一个 TransactionSynchronization,以便在事件发生时回调,例如当前正在运行的事务的提交:

@PostPersist
void onPersist() {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {

@Override
public void beforeCommit(boolean readOnly) {
// do work
}
});
}
}

TransactionSynchronization 还在事务成功提交之后和事务完成之前/之后提供回调。

如果您需要检查事务是提交还是回滚,请使用afterCompletion(int status)

有关详细信息,请查看 TransactionSynchronization's JavaDoc .

关于java - JPA/@PostPersist @PostUpdate - 交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895854/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com