@Transaction - 如何在同一事务中提交另一个方法

时间:2014-11-09 19:13:13

标签: java spring hibernate transactions

我有一个使用@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;
}

1 个答案:

答案 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()或搜索实体或事务提交时,才会刷新持久性上下文。只有在这些情况下,您所做的更改才可用。