메소드에 @Transactional 이 필요한 이유
queryDSL의 update 쿼리를 사용하기 위한 규칙이라고 함.(deletee도 마찬가지)
org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query 라는 오류가 발생함.
update/delete를 하기 위해서는 트랜잭션이 필수적으로 존재해야하는데, 트랜잭션이 존재하지 않아서 발생함
하지만 그 전에 스케줄러가 돌 때 @Transactional 을 선언해줬기 때문에 존재해야 하는데 이 부분에 대해서는 더 찾아보겠습니다
em.flush(), em.clear()를 하는 이유
queryDSL의 update 쿼리는 영속성 컨텍스트를 이용하는 것이 아닌 직접 DB에 쿼리 전달을 함
이로 인해 영속성 컨텍스트에서 가지고 있는 값과 DB의 값이 일치하지 않는 문제가 생겨
영속성 컨텍스트를 비워준다.
Issue: ✅ Feature
Description
org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query 라는 오류가 발생함. update/delete를 하기 위해서는 트랜잭션이 필수적으로 존재해야하는데, 트랜잭션이 존재하지 않아서 발생함
하지만 그 전에 스케줄러가 돌 때 @Transactional 을 선언해줬기 때문에 존재해야 하는데 이 부분에 대해서는 더 찾아보겠습니다
To do
ETC