我们正在从头开始在Spring Boot 2.0.1和Hibernate 5.2中开发一个应用程序 . 我们使用 @PersistenceContext EntityManager 来保存数据库中的数据并管理单个事务 . 这是我们在两个不同的线程中为 @PersistenceContext EntityManager 接收相同ID的情况 . 我的问题是,如果其中一个线程导致错误,那么回滚如何在相同的 EntityManager 上运行,以及 @PersistenceContext@Transactional 如何在多线程/多用户环境中工作 . 那个 EntityManager 的同一个实例将如何知道哪个数据在哪个会话中持续存在?

考虑以下两个不同用户的两个屏幕截图,其中我为 EntityManager 获取了相同的ID . 由于这是我的第一个问题,我不允许直接发布图像,因此它创建了图像链接 .

以下是代码段:

@PersistenceContext
private EntityManager entityManager;

@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void persist(Object object) throws Exception {
    entityManager.persist(object);
}

First User Scenario

Second User Scenario