【发布时间】:2019-07-05 04:01:17
【问题描述】:
到目前为止,我了解到 JPA 是一种规范,而 Hibernate 是基于该规范的 ORM 工具,我们可以有不同的 JPA 实现。但是我不明白 JPA 2 怎么可能不支持 java.time.Instant 但 Hibernate 5.2x 支持它。
我已经阅读了这个问题why-jpa-does-not-support-java-time-instant,但它没有正确的答案,也没有谈到 hibernate 如何能够为 Instant 作为 JPA 特定实现提供支持。
【问题讨论】:
-
另外,从历史上看,在 JPA 之前就有 Hibernate。 JPA 主要受到 Hibernate 的启发。
-
仅供参考,在 Hibernate 支持之前,其他 JPA 提供程序(例如 DataNucleus)支持 Instant。为什么 JPA 规范(2.2)没有添加对它的支持归于 Oracle(又名 EclipseLink 团队)......只有他们没有“委员会”,请参阅这个问题以获得支持 github.com/eclipse-ee4j/jpa-api/issues/163
-
JPA 2 只是一个 API,因此它只说明必须支持的内容,而不是可以或不能支持的内容。因此,Hibernate 开发人员选择支持
Instant,尽管没有明确要求他们这样做。我假设他们也正确支持强制类型。主要思想是:Hibernate 不仅限于做 JPA2 要求的事情,它们可以(并且显然)做更多的事情。其优点需要单独讨论。 -
... 例如,考虑到 Hibernate 是 JPA 功能的超集,人们可能会谨慎行事,因为沉迷于特定于 Hibernate 的功能可能会被供应商锁定为无法将 JPA 提供商视为应用程序的外部服务(例如,如果您使用
Instants,则不能只插入任何合适的 JPA 提供程序,您会被锁定在支持该类型的服务中)。
标签: java database hibernate jpa jpa-2.0