카테고리 없음

JPA 트랜잭션 커밋 에러

9yuhyeon.dev 2025. 2. 20. 17:02

에러 상황

음식점 등록 API를 호출해서 클라이언트 요청을 보내면 Postman에서는 200, OK가 뜨는데 DB에 저장이 안된다.

ERROR org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction

 

Entity부터 DTO, Controller, Service까지 다 점검하면서 스펠링이 틀리진 않았는지, 값을 잘못 초기화 한게 아닌지, 클라이언트로부터 값을 매핑 및 잘 전달받았는지 로그를 하나하나 찍어보면서 점검해봤는데 문제가 없었다.

 

에러 원인

영업 시간 컬럼을 최초에 String 타입으로 "18:00~02:00" 이런 식으로 받다가 LocalTime으로 openTime, closeTime 구분해서 분리했다. 이 때 String을 사용할 때 적용했던 @NotBlank가 문제였다.

 

@NotBlank는 String(문자열) 타입에서만 동작한다. LocalTime 타입은 문자열이 아닌 객체이기 때문에 @NotBlank 적용 시 SpringBoot의 Hibernate Validator가 해당 필드를 String(문자열)으로 취급하려고 시도하지만 String이 아니기 때문에 검증 과정에서 예외가 발생할 수 있다.

 

이로 인해 트랜잭션이 정상적으로 커밋되지 못하고 TransactionSystemException이 발생되어 롤백한 것이다.

 

해결

LocalTime은 객체이기 때문에 검증을 위해 @NotNulll을 사용하여 null 값을 허용하지 않도록 설정했다.

 

P.S 별 것 아닌 문제로 얼마나 시간을 잡아 먹었던지.. 기억해두자!