Почему java.time.Instant поддерживается в Hibernate 5.2, а не в JPA 2? - PullRequest
0 голосов
/ 11 февраля 2019

До сих пор у меня есть понимание, что JPA - это спецификация, а Hibernate - инструмент ORM, основанный на этой спецификации, и у нас могут быть разные реализации JPA.Но я не мог понять, как это возможно, что JPA 2 не поддерживает java.time.Instant, но Hibernate 5.2x поддерживает его.

Я прочитал этот вопрос Why-jpa-do-not-support-java-time-instant , но он не имеет правильных ответов и не говорит о том, как hibernate может обеспечить поддержку Instant, являющегося специфической реализацией JPA.

1 Ответ

0 голосов
/ 11 февраля 2019

JPA - это просто спецификация - это набор интерфейсов для предоставления общего API.Он описывает доступ к реляционной базе данных, чтобы помочь разработчикам управлять несколькими поставщиками БД.Существует несколько реализаций JPA, в качестве ссылки используется EclipseLink, разработанная в рамках Eclipse Public License.Другими словами, это стандарт, такой как SQL-92 или SQL: 2006.Базы данных, которые утверждают, что поддерживают данный стандарт, могут реализовывать собственные функции вне его, чтобы упростить доступ к данным.

Чтобы использовать JPA, нам нужна реализация.Помимо EclipseLink наиболее распространенными являются Hibernate, OpenJPA и DataNucleus.Все они поддерживают JPA 2.2.

Они реализуют спецификацию JPA, но также предоставляют дополнительные функциональные возможности для преодоления некоторых недостатков JPA.Эти функциональные возможности являются основным отличием между реализациями и делают код специфичным, т. Е. Используя, например, Hibernate, следуя изменениям кода, которые необходимо выполнить при изменении спецификации JPA.Только при использовании JPA мы можем переключаться между реализациями.Однако я никогда не видел ни одного проекта, который бы поменял продавца JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...