[Spring] InvalidDataAccessApiUsageException: Query requires transaction be in progress
문제 상황
InvalidDataAccessApiUsageException: Query requires transaction be in progress
kafka consumer를 통해 한 메소드에 여러 스레드가 접근하고 있었는데 내부 로직 중 동시에 접근하면 안되는, 수정하는 작업이
포함된 영역이 있어 Lock을 걸어줬었다. 이때 해당 영역을 거칠 때마다 InvalidDataAccessApiUsageException
가 계속 발생했다.
해결
해당 영역을 포함하는 함수에 @Transactional
을 선언해주면 해결된다.
아래에서는 findByName()
에 Lock을 걸어줬었다.
@Transactional
public Optional<Long> getNewProductId(String productName) {
Optional<Product> optionalProduct = productRepository.findByName(productName);
if (optionalProduct.isPresent()) {
Product product = optionalProduct.get();
return Optional.of(product.getId());
}
return Optional.empty();
}
댓글남기기