- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用 @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/
我有一个带有名为“doAudit”的@PostPersist 方法的监听器来审核创建操作。在调试时我看到此方法被调用并且审核记录是在 JAVA 端创建的。但是当我验证数据库时,我没有看到记录。 pub
我有一个持久化实体对象的方法 persistData() 。我有另一个方法 findData() ,它对同一实体类执行 find() 操作以获取持久的主键值。当我在实体类的@PostPersist中调
我已经阅读了有关生命周期事件的文档,以及关于在生命周期事件期间更改或保留新实体的几个问题。调用EnitityManager::flush()似乎是个问题。 好的,但是 looking carefull
我想在实体上添加新的 Feed 项并持续更新。我写了这个事件监听器(postUpdate 是一样的): public function postPersist(LifecycleEventArgs $
我正在尝试在创建另一个实体的基础上创建一个新实体。示例:我有一段关系 Sale Payment 现在,当我坚持销售时,您必须创建一个初始付款,但我不知 Prop 体该怎么做。 我尝试过: 使用@OR
我在使用手动事务时插入/更新 3 个表。我想在事务提交后立即插入到历史表中。这意味着有 3 em.persist操作(对于每个表),并且只有在提交它们之后我才想调用一个方法。 这是我的代码: @Res
Doctrine 的事件监听类中的 postUpdate 和 postPersist 事件有什么区别?以我的理解,更新和插入都必须坚持下去。那么当可以在 postPersist 事件中处理它时,拥有
我正在尝试设置我的 hibernate 应用程序以在每次创建 Activity 实体时都保留一个新的 Notification 实体 - 目前,我已经尝试了 通知只是无法静默地持续存在(日志中没有错误
假设我有实体 Account: @Entity(name = "ACCOUNT") @EntityListeners(Listener.class) public class AccountEntit
我在数据库中出现双重插入的奇怪错误。我有以下类(class): TestEntity - 具有@PrePersist 和@PostPersist 方法的实体。 Auditoria - 审计实体 Dat
我目前正在使用 @PostPersist 和 @PostUpdate,在这些触发器中我正在持久化其他实体。问题是,这些触发器是否在同一事务中,如果不是,是否可以强制执行? 对我来说,它是这样工作的。当
我正在使用监听器来坚持和根据 Doctrine 进行更新。 唯一的问题是,当调用监听器时,它会创建并更新新的/当前的实体,因此它再次调用自身,从而创建两个实体。 我认为阻止这种情况的唯一方法是拥有一个
在 Symfony 中创建 Doctrine postPersist EventListener 后,我的 IDE 指向 $args->getEntity() 行;由于已被弃用,我不知道如何解决这个问
我有一个 JPA @Entity 类,它使用 @PrePersist 已经有一段时间了。今天我想在需要该实体 ID 的地方添加一些功能。此 ID 由数据库中的 HIBERNATE_SEQUENCE 持
我有一个用于测试 @EntityListeners 功能的小型测试应用程序。当我运行应用程序时,我得到以下堆栈跟踪 Exception in thread "main" org.springframe
我有下一个 ER 图 我想在每次保存 Score 实体时更新 PlayerStat 实体。所以我尝试使用 @PostPersist 注释。当我保存 Score 实体时,调用该注释的函数,但我在此函数中
每当在管理员中完成持久化或更新等操作时,我想创建一个静态 Twig 文件。我在想的是创建一个名为 GenerateStaticListener 的监听器。监听器将监听事件 postPersist 或
我是一名优秀的程序员,十分优秀!