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

wis*_*ame 16 hibernate jpa jpa-2.0 java-8 java-time

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

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

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

有更好的选择吗?谢谢.

lpa*_*zic 19

要么使用Hibernate 5.2.0+,要么为早期的Hibernate 5添加以下依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-java8</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)


小智 9

在Hibernate 5.2以后,这个问题得到了更充分的解决 - 您不再需要包含hibernate-java8Ipandzic注释中的依赖项,您可以使用java.time.*诸如LocalDateTime或Instant之类的类,而无需任何其他步骤.您也不需要再使用Instant等标记列java.util.LocalDateTime,就像使用旧Temporal方法一样.

从Hibernate 5.2开始,java.util.Date内容已合并到hibernate-java8 这里查看更改说明


Jod*_*hen 6

请参阅ThreeTen主页,其中提到了三个不同的JPA库: