使用JPA2 / Hibernate保留java.time.Instant(JDK8)

时间:2014-10-19 04:58:27

标签: hibernate jpa jpa-2.0 java-8 java-time

JPA和Hibernate目前都不支持JSR-310在JDK8中带来的新日期/时间类(JPA ticket,Hibernate ticket)。尽管如此,我还是希望使用JDK8日期/时间类进行编码,因为它们最终设计得很好。特别是,我对java.time.Instant感兴趣,并不完全支持所有java.time.*类型,因为我的所有实体都会使用这个特定的类(或者我现在认为,至少:-)

一种选择是编写type converter,如JPA 2.1所定义。但是,我们的应用服务器是JBoss EAP 6.3,它是JPA 2.0但不兼容2.1,所以现在这是不可能的。

下一个选项是使用Hibernate用户类型(关于转换其他JSR-310类here的博客文章)。

有更好的选择吗?感谢。

3 个答案:

答案 0 :(得分:19)

使用Hibernate 5.2.0+或者对于早期的Hibernate 5添加以下依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-java8</artifactId>
        <version>${hibernate.version}</version>
    </dependency>

答案 1 :(得分:6)

参见ThreeTen home page,其中提到了三个不同的JPA库:

答案 2 :(得分:6)

在Hibernate 5.2之后,此问题得到了更充分的解决 - 您不再需要在Ipandzic的评论中包含hibernate-java8依赖关系,您可以使用java.time.*LocalDateTime }或即时没有任何额外的步骤。您也不需要使用java.util.LocalDateTime等标记列作为Temporal了,就像使用旧的java.util.Date方法一样。

自Hibernate 5.2起,hibernate-java8内容已合并到hibernate-core see the change notes here