Programming/Javascript

TransactionRequiredException: Executing an update/delete query 오류의 해결 방법은 @Transaction

Jan92 2021. 8. 9. 21:16

Executing an update/delete query Error

 

Springboot, JPA 를 사용한 프로젝트 개발 중 발생한 에러입니다.

FAQ 카테고리를 삭제하면 해당 카테고리에 속하는 FAQ들을 모두 삭제시키는 경우에서 발생했습니다.

(삭제라고는 하지만 실제로는 useAt 필드 값을 통해 삭제 여부를 변경 즉, update 하는 로직입니다.)

 

 

정상적으로 FAQ Category 삭제 요청이 들어왔을 때 해당 FAQ Category의 useAt 값을 바꾸고, categoryIdx를 통해 해당 카테고리에 속하는 모든 faq의 상태값을 삭제 된 것으로 바꾸는 과정에서 아래와 같이 JPA를 사용한 void method로 update를 실행했습니다.

@Override
public void deleteAllFaqInQCategory(Long qCategoryIdx) {
	QFaq faq = QFaq.faq;
    
    Long updateFaq = queryFactory.update(faq).where(faq.useAt.eq("1").and(faq.QCategoryIdx.eq(qCategoryIdx)))
    	.set(faq.useAt, "0")
        .excure();
}

 

그리고 프로젝트를 구동하여 카테고리를 삭제하니 에러 가 발생했습니다.

 

javax.persistence.TransactionRequiredException:Executing an update/delete query 

Executing an update/delete query

 

해당 에러는 Update, Delete의 경우 Transaction 처리가 필요한데 해당 처리가 없었기 때문입니다.

 

 

@Transcation
@DeleteMapping("/delete")
public ResponseEntity<Map<String, Object>> deleteFaq(Long faqIdx) {
	
}

 

해결방안은 컨트롤러에 @Transaction 어노테이션을 추가하였고, 다시 동작했을 때 오류없이 update가 진행되었습니다.

(javax.transaction.Transactional)