[JPA] 데이터베이스에서 가져온 날짜 데이터가 LocalDateTime/LocalDate에 매핑이 안된다..

Sundae·2023년 11월 17일
post-thumbnail

LocalDateTime/LocalDate에 매핑 불가

Jpa의 native query를 사용하여 테이블의 데이터를 가져왔다.

리스트에 Map<String, Object> 타입 객체들을 담아 가져온 뒤, value가 Object 타입이라 l.lrtime을 다시 원래의 LocalDateTime으로 강제 캐스팅하고 다른 연산을 시도하려 했다.

결과는 클래스 캐스팅 예외 발생..

원인이 무엇일까? Object에 담겨있는 타입을 하나씩 확인해보았다.

출력 결과는 다음과 같다.

4번 째 줄에서 true가 출력되었다.

결론은 Entity의 필드 타입이 LocalDateTime 혹은 LocalDate였어도 반환 결과는 Timestamp로 들어온다. (LocalDate는 Date로 들어온다.)

Date/Timestamp를 LocalDate/LocalDateTime으로 변환하기

(아래 방법은 JPA2.1기준이다. JPA2.2부터는 LocalDate/LocalDateTime을 지원해주기 때문에 알아서 매핑된다.)
본인같은 경우에는 Map<String, Object>로 데이터를 매핑했기 때문에 상관없지만. 만약, 엔티티를 사용한다면 Date/Timestamp를 LocalDate/LocalDateTime으로 변환하려면 직접 메서드를 정의해야한다. AttributeConverter<EntityType, DatabaseType> 인터페이스를 구현하고 필드에 @Convert( converter = [변환클래스].class) 주석을 추가하면된다.

  • LocalDateTime과 Timestamp

  • LocalDate와 java.sql.Date

아래와 같이 어노테이션을 추가하면 된다.

profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.

0개의 댓글