2024-06-11
1. 원인
최근 프로젝트에서 JPA를 사용하여 PostgreSQL 데이터베이스와 상호 작용하던 중, 예약 시간을 나타내는 엔티티 필드에서 호환성 문제가 발생했습니다. LocalTime으로 매핑된 reservationTime 필드를 사용할 때, PostgreSQL의 TIME 컬럼과의 호환성 문제로 인해 "Invalid value for NanoOfSecond" 오류가 발생했습니다.
Invalid value for NanoOfSecond (valid values 0 - 999999999): -935000000
기존 오류가 발생하던 entity 정보는 아래와 같습니다.
@Column(name = "reservation_tm", columnDefinition = "TIME")
private LocalTime reservationTime; //예약 시간
2. 해결방법
문제를 해결하기 위해 다양한 시도를 했지만, 가장 간단하면서도 효과적인 해결책은 @Temporal(TemporalType.TIME) 어노테이션을 추가하여 LocalTime 대신 Date 객체를 사용하는 것이었습니다.
@Column(name = "reservation_tm", columnDefinition = "TIME")
@Temporal(TemporalType.TIME)
private Date reservationTime; //예약 시간
이 변경으로 인해 JPA는 reservation_tm 컬럼을 시간 정보만 다루는 것으로 인식하고, 그에 맞게 변환하여 처리하게 됩니다. 이를 통해 "Invalid value for NanoOfSecond" 오류가 해결되었습니다.
메인 이미지 출처 : 사진: Unsplash의Grigorii Shcheglov