Kotlin & JPA

[JPA] TransactionRequiredException: Executing an update/delete query 에러 해결

Jane Kwon 2022. 1. 20. 17:04
반응형

 

JPA로 업데이트문을 만들었는데

import shop.janes.apis.web.v1.domain.record.entity.Record
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Modifying
import org.springframework.data.jpa.repository.Query

interface RecordRepository : JpaRepository<Record, String> {

	@Modifying
	@Query("update Record r set r.used = :used where r.id = :id")
	fun updateUsedById(id: String, used: String)

}

아래와 같이 Exception이 떨어졌다.

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query

 

 

 

이유는 UPDATE 문, DELETE 문의 경우엔 @Transactional 어노테이션을 추가해주지 않았기 때문이다.

 

 

아래와 같이 @Transactional 어노테이션을 추가해주면 해결!

import shop.janes.apis.web.v1.domain.record.entity.Record
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Modifying
import org.springframework.data.jpa.repository.Query
import org.springframework.transaction.annotation.Transactional

interface RecordRepository : JpaRepository<Record, String> {

	@Transactional
	@Modifying
	@Query("update Record r set r.used = :used where r.id = :id")
	fun updateUsedById(id: String, used: String)

}

 

 

 

이 때, @Transactional 어노테이션을 임포트할 때 주의해야할 점이 있다.

javax.transaction.Transactional이 아닌 org.springframework.transaction.annotaion.Transactional을 선택해야 한다.

 

 

 

 

 

반응형