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

标签 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;
}

最佳答案

在同一事务边界内 - 您所做的任何更改(创建或更新)都将可见。我相信您需要在方法调用之间调用 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/

相关文章:

java - 使用单选按钮时更改框架的颜色

java - Hibernate Configuration 有必要使用 AnnotationConfiguration 吗?

spring - 使用 Spring 框架进行流式传输

java - Spring SOAP 合并 .xsd 文件

java - 无法使用 YAML Spring Profile 禁用 @Cacheable

java - 为什么@JoinColumns 的顺序很重要?

java - 将纬度/经度转换为 JTS?

java - Java中的Echo类

java - 在设备上运行黑莓应用程序 'attempts to access a secure api'

java - 为 Installanywhere2010 安装程序设置 UAC 'Publisher' 字段