gpt4 book ai didi

jpa @postpersist @postupdate 仅在事务提交后

转载 作者:行者123 更新时间:2023-12-01 14:23:23 25 4
gpt4 key购买 nike

我在使用手动事务时插入/更新 3 个表。我想在事务提交后立即插入到历史表中。这意味着有 3 em.persist操作(对于每个表),并且只有在提交它们之后我才想调用一个方法。

这是我的代码:

@Resource
private EJBContext context;

public void save(Object obj)
{
try
{
transaction = context.getUserTransaction();
transaction.begin();

em.persist(obj);

sb2.save(obj); //persist in sb2
sb3.save(obj); //persist in sb2

transaction.commit();
}
catch (Exception exp)
{
transaction.rollback();
}
}

是否有任何类型的提交后方法?
如何在提交之后而不是在持久之后调用方法?

最佳答案

您可以使用 TransactionSynchronizationRegistry注册要在事务完成后执行的回调:

public class MyListener {

// if you can't inject it with @Resource, you'll have to fetch it from JNDI
@Resource
private javax.transaction.TransactionSynchronizationRegistry registry;

@PostUpdate
public void postUpdate(final Object entity) {
registry.registerInterposedSynchronization(new Synchronization() {

public void beforeCompletion() {}

public void afterCompletion(int status) {
if (status == javax.transaction.Status.STATUS_COMMITTED) {
// Do something with your entity
}
}
});
}
}

然后用 @EntityListeners(MyListener.class) 注释你的实体(或将其添加到您的 orm.xml 中)。

关于jpa @postpersist @postupdate 仅在事务提交后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17511590/

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