본문 바로가기
[개발] 프레임워크/Spring

[JPA] java 8과 hibernate의 java.time 패키지 처리

by Devsong26 2024. 7. 3.

프로젝트 스펙은 아래와 같습니다.

  • hibernate-core 5.0.12
  • hibernate-jpa-2.1-api 1.0.0 Final
  • java 1.8

 

날짜 컬럼을 이용하여 Between 쿼리를 수행하려고 합니다.

findBy[날짜필드]Between(LocalDateTime startDate, LocalDateTime endDate)

 

이 메서드를 수행하면 LocalDateTime이 아래와 같이 파라미터 바인딩되어 정상적으로 데이터를 가져오지 못합니다.

between '<byte[]>' and '<byte[]>'

 

LocalDateTime을 byte[]로 인식을 합니다.

 

java.time.LocalDateTime을 java.util.Date 으로 타입을 변경하면 정상적으로 메서드가 수행됩니다.

왜 이런 상황이 발생한 걸까요?

 

 

hibernate 5.0 공식 문서를 보면 아래와 같은 언급이 있습니다.

Hibernate allows various Java Date/Time classes to be mapped as persistent domain model entity properties. The SQL standard defines three Date/Time types:

DATE
Represents a calendar date by storing years, months and days. The JDBC equivalent is java.sql.Date
TIME
Represents the time of a day and it stores hours, minutes and seconds. The JDBC equivalent is java.sql.Time
TIMESTAMP
It stores both a DATE and a TIME plus nanoseconds. The JDBC equivalent is java.sql.Timestamp

 

기본적으로 hibernate에서 엔티티 프로퍼티에 사용 가능한 Date/Time 관련 클래스는 java.sql.Date, java.sql.Time, java.sql.Timestamp 세가지 입니다.

 

java.time 패키지를 프로퍼티로 사용하려면 아래의 내용대로 해야 합니다.

 

Java 8 came with a new Date/Time API, offering support for instant dates, intervals, local and zoned Date/Time immutable instances, bundled in the java.time package. Hibernate added support for the new Date/Time API in a new module, which must be included with the following Maven dependency:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>${hibernate.version}</version>
</dependency>

 

 

정리하면 java 8의 java.time 패키지를 Hibernate에서 사용하려면 'hibernate-java8' 라이브러리를 추가하라는 이야기입니다.

 

위의 절차대로 진행하고 다시 실행하면 정상적으로 날짜 문자열이 바인딩 되는 것을 확인할 수 있습니다.

between '2024-06-03 16:00:16' and '2024-07-03 16:00:16'

 

 

'[개발] 프레임워크 > Spring' 카테고리의 다른 글

ehcache  (0) 2024.07.26
[JPA] 트랜잭션을 지원하는 쓰기 지연은 락을 몇 초 잡을까?  (1) 2024.07.14
Spring AOP  (1) 2024.06.26
Spring MVC  (0) 2024.06.23
트랜잭션 동일성 비교하기  (0) 2024.02.08