하이버네이트는 기존 자바의 Date , Calendar 같은 타입을 지원해주기 위해 @Temporal 이라는 애너테이션을로 날짜 속성을 다뤘다.

그리고 Java8부터 신규 날짜 타입인 LocalDateTime , DateTime 이 추가되었음.

이에 대한 하이버네이트의 지원 히스토리는 다음과 같다.

Hibernate의 LocalDateTime 지원 버전 히스토리

Hibernate 5.0 — 최초 지원 (단, 별도 jar 필요)

Hibernate 5.0 ~ 5.1은 Java 7 기반이었기 때문에, Java 8 Date/Time API 지원을 위해 별도의 hibernate-java8 의존성 추가가 필요했습니다.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>5.1.0.Final</version>
</dependency>

Hibernate 5.2 — 코어에 통합 (별도 jar 불필요)

Hibernate 5.2부터는 Java 8 기반으로 전환되면서, Date/Time API 지원이 hibernate-core 모듈 자체에 포함되었습니다. 더 이상 별도 jar가 필요 없습니다.

Hibernate 5.3 — JPA 2.2 표준 준수

Hibernate ORM 5.3은 JPA 2.2 표준을 구현하며, 이 스펙에서 LocalDateTime을 포함한 Java 8 타입들이 공식 JPA 표준으로 지정되었습니다.

Hibernate 6 — ZonedDateTime / OffsetDateTime 처리 개선

ZonedDateTimeOffsetDateTime에 대한 타임존 처리 지원이 Hibernate 6에서 강화되었습니다. (LocalDateTime 자체의 매핑은 이미 5.x에서 완성)


실무 요약

상황 권장
Hibernate < 5 AttributeConverter 직접 구현 필요
Hibernate 5.0 ~ 5.1 hibernate-java8 의존성 추가
Hibernate 5.2+ 추가 설정 없이 바로 사용 가능

예시 코드

package net.daum.cafeadm.util;

import java.time.format.DateTimeFormatter;
import javax.persistence.AttributeConverter;
import java.time.LocalDateTime;

public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, String> {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public String convertToDatabaseColumn(LocalDateTime localDateTime) {
        return localDateTime != null ? FORMATTER.format(localDateTime) : null;
    }

    @Override
    public LocalDateTime convertToEntityAttribute(String string) {
        return string != null ? LocalDateTime.parse(string, FORMATTER) : null;
    }
}