Каковы последствия того, что НЕ помечать EntityManager как @PersistenceContext - PullRequest
1 голос
/ 29 января 2020

В существующем проекте я сейчас работаю над стартером Spring Boot для JPA 'org.springframework.boot:spring-boot-starter-data-jpa'. Я столкнулся с действительно странным кодом, который все еще работает.

Используется EntityManager, но оно не помечено как @PersistenceContext, а скорее как @Resource. Из того, что я понял, @PersistenceContext гарантирует, что Spring повторно использует EntityManager в поточно-ориентированном режиме, что обеспечивает правильную функцию @Transactional.

Каковы последствия не использования @PersistenceContext для EntityManager?

@Service
@Transactional
public class ExampleService {

    @Resource
    private EntityManager entityManager;

}

Исходя из документации, я ожидаю, что произойдут странные вещи, такие как повторное использование / вложение транзакций, поскольку один и тот же EntityManager предоставляется нескольким вызовам / потокам и другим страшным вещам.

...