티스토리 뷰
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을 선택해야 한다.
반응형
'Kotlin & JPA' 카테고리의 다른 글
[Kotlin] 퓨니코드(Punycode)를 한글로 변환 (0) | 2022.03.02 |
---|---|
[Kotlin] The bean 'errorDecoder', defined in class path resource, could not be registered. 에러 해결 (0) | 2022.01.21 |
[Kotlin] Gradle json-simple 라이브러리 사용해서 json 파일 불러오기 (0) | 2022.01.18 |
[Kotlin] 한글 퓨니코드(Punycode)로 변환 (0) | 2022.01.18 |
[Kotlin] @FeignClient config 설정 (타임아웃 설정) (0) | 2022.01.13 |