我有一个使用@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;
}
答案 0 :(得分:1)
在同一事务边界内 - 您所做的任何更改(CREATE或UPDATE)都将可见。我相信你需要在方法调用之间调用flush()方法。
// Create code
entityManager.flush(); // If you use JPA, or it will be session.flush() for hibernate
// Update code goes here
仅当您显式调用flush()或搜索实体或事务提交时,才会刷新持久性上下文。只有在这些情况下,您所做的更改才可用。