В существующем проекте я сейчас работаю над стартером 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 предоставляется нескольким вызовам / потокам и другим страшным вещам.