我有一个使用@Transactional 注释的方法,在这个方法中,我有一个持久化一个实体的方法,下一个使用这个尚未持久化的持久化实体,因为使用@Transactional 的方法没有完成。
执行此操作的最佳方法是什么?我想到了REQUIRED_NEW,但是当这是一个新的事务时,如果外部事务失败,它不会全部失败。
谢谢!!
保罗
@Override
@Transactional
public Catalog updateCatalog(CatalogPrice catalog, Long id) {
CatalogEntity catalogEntity = CatalogEntity.findSingle(id);
Catalog catalog = catalogHand.updateCatalogPrice(catalog);
catalogEntity.sendToQueue(catalog);
return catalog;
}
最佳答案
在同一事务边界内 - 您所做的任何更改(创建或更新)都将可见。我相信您需要在方法调用之间调用 flush() 方法。
// Create code
entityManager.flush(); // If you use JPA, or it will be session.flush() for hibernate
// Update code goes here
仅当您显式调用 flush() 或搜索实体或提交事务时,才会刷新持久性上下文。只有在这些情况下,您所做的更改才可用。
关于java - @Transaction - 如何在同一个事务中提交另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26832171/