최대 1 분 소요

문제 상황

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();
}

카테고리:

업데이트:

댓글남기기