Hibernate 5.0.9 이용시 JAVA 8 LocalDateTime 데이터타입이 PostgreSQL에서 bytea 데이터타입으로 저장되는 문제

조회수 1442회

Hibernate 5.0.9버전으로 Dialectpostgresql을 사용중입니다. Java8의 새로운 java.time패키지를 사용하기 위해 jackson-datatype-jsr310의존성을 추가하고 사용중입니다.

질문

다음처럼 필드를 선언하고 DDL이 자동으로 생성될 때 postgresql에서 데이터 타입이 bytea가 됩니다.

@Column
private LocalDateTime created;

헌데 또 다시 조회를 해보면 정상적으로 값을 조회하는걸 볼 수 있는데요, 원래 LocalDateTime등 새로운 java.time패키지의 타입을 사용하면 데이터 타입은 bytea가 되는 것인가요? 직접 DB client 에 접근해서 데이터를 조회하면 알아볼 수 없는 문제가 있는데 불가피한 것인지요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • @Column(name = "run_from")
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime created;
    

    https://java.net/jira/browse/JPA_SPEC-63 에 따르면, 기본적으로 되어야 할 것같은데, 위와 같이 한번해보세요. 확인해보지는 못했지만, postgresql jdbc driver 혹은 dialect 의 문제일 수도 있습니다. postgresql을 위한 dialect는 postgresql 버전에 따라 있는 것으로 기억하는 데, 이를 확인해보는 것도 좋을 것 같습니다.

    그리고 안될 경우 http://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/ 링크의 내용을 참고보는 것이 좋을 것 같습니다. LocalDateTime을 Database의 java.sql.Timestamp 로 변경하여, DB의 Timestamp Column과 맵핑하는 방법입니다.

    • 답변 감사합니다. `@Temporal`은 `java.util.Date`타입에 사용할 수 있도록 작성된 애노테이션이어서 `LocalDateTime`등 `java.time.*`패키지의 클래스에는 사용할 수 없습니다. 또한 `@Converter`를 사용하는 방법도 순탄히 적용되지는 않습니다. 링크해주신 글은 이미 질문을 올리기전에 확인했던 글이기도 하고요. 문제가 해결되지는 않았습니다. 확인해봐야 할만한 다른 사안이 있을까요? 알 수 없는 사용자 2016.7.26 09:45
    • 혹시 라이브러리 의존성에 hibernate-java8 을 추가해보셨나요? 허대영(소프트웨어융합대학) 2016.7.26 11:43
    • 네 5.2.1Final 버전으로 추가되어 있습니다. 알 수 없는 사용자 2016.7.26 13:56

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)