到目前为止,我已经了解到JPA是一个规范,而Hibernate是基于该规范的ORM工具,我们可以使用JPA的不同实现。但是我不明白为什么JPA 2不支持java.time.Instant,但是Hibernate 5.2x支持它。
我已经阅读了API reference这个问题,但是它没有正确的答案,也没有讨论冬眠如何能够为作为JPA特定实现的Instant提供支持。
答案 0 :(得分:3)
JPA只是一个规范-它是一组提供通用API的接口。它描述了对关系数据库的访问,以帮助开发人员管理多个dbms供应商。 JPA有多种实现,参考是在Eclipse Public License下开发的EclipseLink。换句话说,这是一个标准,例如SQL-92或SQL:2006。声称支持给定标准的数据库可以在其外部实现自己的功能,从而简化数据访问。
为了使用JPA,我们需要一个实现。除了EclipseLink,最常见的是Hibernate,OpenJPA和DataNucleus。它们都支持JPA 2.2。
它们不仅实现了JPA规范,而且还提供了其他功能来克服JPA的某些缺点。这些功能是实现之间的主要区别,它们使代码特定化,例如,使用Hibernate遵循更改JPA规范时需要进行的代码更改。仅当使用JPA时,我们才可以在实现之间切换。但是我从未见过任何项目改变了JPA供应商。