@Async和@Transactional坚持持久化已经持久化的对象 JPA



我正在@Async和@Transactional方法中在我的@Service类中执行一些持久操作。

在此方法中,我们持久化

一些对象,然后在同一事务中持久化与这些已持久化对象相关的新对象。

JPA 抛出异常,因为他认为这些相关对象没有持久化:

a new object was found through a relationship that was not marked cascade PERSIST

这是我的服务类结构:

@Service
public class AsyncOperationsServiceImpl implements AsyncOperationsService {

    @Async
    @Override
    @Transactional
    public void save(CampaignDTO campaignDTO) {
       // saving related objects here throws an exception
    }
}

我想这与事务和异步方法有关,因为当没有异步注释时,相同的代码正在工作。

我也尝试在事务注释中使用传播,但不起作用。

我在这里错过了什么?

谢谢!

联存在关系问题,您需要使用@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)注释,其中在实体中声明关系。

我找到了解决方案。

在这种情况下,此传播是必需的,因此将传播事务。

@Async
@Override
@Transactional(propagation = REQUIRES_NEW)
public void save(CampaignDTO campaignDTO) {
   // saving related objects here throws an exception
}

在这种情况下,不会引发异常,而无需修改实体中的级联类型。

最新更新