eco-dessert-platform / backend

Apache License 2.0
0 stars 0 forks source link

✅ queryDSL을 이용한 Update Bulk 처리 논의 #281

Closed sikdong closed 1 month ago

sikdong commented 1 month ago

Issue: ✅ Feature

Description

image

  1. 메소드에 @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 을 선언해줬기 때문에 존재해야 하는데 이 부분에 대해서는 더 찾아보겠습니다

image

  1. em.flush(), em.clear()를 하는 이유 queryDSL의 update 쿼리는 영속성 컨텍스트를 이용하는 것이 아닌 직접 DB에 쿼리 전달을 함 이로 인해 영속성 컨텍스트에서 가지고 있는 값과 DB의 값이 일치하지 않는 문제가 생겨 영속성 컨텍스트를 비워준다.

To do

ETC