Джакарта Настойчивость
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2010 г. ) |
Jakarta Persistence , также известный как JPA (сокращенно от прежнего названия Java Persistence API ), представляет собой Jakarta EE спецификацию интерфейса программирования приложений , которая описывает управление реляционными данными в корпоративных Java -приложениях.
Настойчивость в этом контексте охватывает три области:
- , Сам API определенный в
jakarta.persistence
упаковка (javax.persistence
для Jakarta EE 8 и ниже) - Язык запросов персистентности Джакарты (JPQL; ранее язык запросов персистентности Java)
- Объектные/реляционные метаданные
Эталонной реализацией JPA является EclipseLink . [1]
История
[ редактировать ]Последней датой выпуска спецификации JPA 1.0 было 11 мая 2006 г. в рамках Java Community Process JSR 220. Спецификация JPA 2.0 была выпущена 10 декабря 2009 г. (для платформы Java EE 6 требуется JPA 2.0). [2] ). Спецификация JPA 2.1 была выпущена 22 апреля 2013 г. (платформа Java EE 7 требует JPA 2.1). [3] ). Спецификация JPA 2.2 была выпущена летом 2017 года. Последняя версия спецификации JPA 3.1 была выпущена весной 2022 года как часть Jakarta EE 10. [1]
Сущности
[ редактировать ]персистентности Сущность — это облегченный класс Java , состояние которого обычно сохраняется в таблице реляционной базы данных . Экземпляры такой сущности соответствуют отдельным строкам таблицы. Сущности обычно имеют отношения с другими сущностями, и эти отношения выражаются через метаданные объектно-реляционного сопоставления (ORM). Эти метаданные могут быть указаны непосредственно в файле класса сущности с помощью аннотаций или в отдельном файле дескриптора XML , распространяемом вместе с приложением.
Пример
[ редактировать ]Пример класса сущности с метаданными ORM, объявленными с использованием аннотаций (операторы импорта и методы установки/получания опущены для простоты).
@Entitypublic class Person { @Id private long id; private String firstName; private String lastName; private int age;}
The @Entity
аннотация заявляет, что класс представляет сущность. @Id
объявляет атрибут, который действует как первичный ключ объекта. Дополнительные аннотации могут использоваться для объявления дополнительных метаданных (например, изменение имени таблицы по умолчанию в @Table
аннотация) или для создания ассоциаций между сущностями.
Язык запросов
[ редактировать ]Язык запросов Jakarta Persistence (JPQL; ранее Java Persistence Query Language) выполняет запросы к объектам, хранящимся в реляционной базе данных. Запросы по синтаксису напоминают запросы SQL , но работают с объектами сущностей, а не напрямую с таблицами базы данных.
Мотивация
[ редактировать ]До появления спецификации EJB 3.0 многие корпоративные Java-разработчики использовали облегченные постоянные объекты, предоставляемые либо средами сохранения (такими как Hibernate ), либо объектами доступа к данным (DAO), вместо использования объектных компонентов . Это связано с тем, что объектные компоненты в предыдущих спецификациях EJB требовали очень сложного кода и требовали большого объема ресурсов, и их можно было использовать только на серверах приложений Java EE из-за взаимосвязей и зависимостей в исходном коде между компонентами и объектами DAO или постоянства. рамки. Таким образом, многие функции, первоначально представленные в сторонних платформах сохранения состояния, были включены в Java Persistence API, а такие проекты, как Hibernate и TopLink Essentials, стали реализациями спецификации Java Persistence API.
Связанные технологии
[ редактировать ]Корпоративные компоненты
[ редактировать ]Спецификация EJB 3.0 (которая сама является частью платформы Java EE 5) включала определение Java Persistence API. Однако разработчикам не нужен контейнер EJB или сервер приложений Java EE для запуска приложений, использующих этот API сохранения. [4] Будущие версии Java Persistence API будут определены в отдельном JSR и спецификации, а не в JSR/спецификации EJB.
Java Persistence API заменяет решение по сохранению EJB 2.0 CMP (постоянство, управляемое контейнером).
API объектов данных Java
[ редактировать ]API Java Persistence был частично разработан для унификации API объектов данных Java и API EJB 2.0 Container Managed Persistence (CMP). Большинство продуктов, поддерживающих каждый из двух API, поддерживают API Java Persistence.
API Java Persistence определяет сохранение только для систем управления реляционными базами данных, уделяя особое внимание объектно-реляционному сопоставлению (ORM). Некоторые поставщики JPA поддерживают другие модели баз данных , хотя это выходит за рамки дизайна JPA. Во вводном разделе спецификации JPA говорится: «Техническая цель этой работы — предоставить разработчику приложений Java средство объектно-реляционного сопоставления, использующее модель предметной области Java для управления реляционной базой данных». [5]
Спецификация объектов данных Java поддерживает ORM, а также сохранение других типов моделей баз данных, например баз данных с плоскими файлами и баз данных NoSQL , включая базы данных документов , графовые базы данных и многие другие хранилища данных.
API объекта сервисных данных
[ редактировать ]Дизайнеры [6] API Java Persistence направлен на обеспечение реляционной устойчивости, при этом многие ключевые области взяты из инструментов объектно-реляционного отображения, таких как Hibernate и TopLink . Java Persistence API стал усовершенствованным и заменил EJB 2.0, о чем свидетельствует его включение в EJB 3.0. API объектов служебных данных (SDO) (JSR 235) имеет совсем другую цель, чем Java Persistence API, и считается [7] [8] дополнительный. API SDO предназначен для сервис-ориентированных архитектур , нескольких форматов данных, а не только реляционных данных, и нескольких языков программирования. Процесс сообщества Java управляет Java-версией SDO API; версия C++ API SDO управляется через OASIS .
Спящий режим
[ редактировать ]Hibernate, основанная Гэвином Кингом, предоставляет с открытым исходным кодом среду объектно-реляционного отображения для Java . Версии 3.2 и более поздние предоставляют реализацию Java Persistence API. [9] [10] Кинг представлял JBoss на JSR 220, [11] экспертная группа JCP, которой поручено разработать JPA. Это привело к постоянным спорам и спекуляциям вокруг отношений между JPA и Hibernate. [ нужна ссылка ] Компания Sun Microsystems заявила [12] эти идеи пришли из нескольких фреймворков, включая Hibernate и Java Data Objects .
Весенние данные JPA
[ редактировать ]Spring Data JPA — это реализация абстракции репозитория, которая является ключевым строительным блоком предметно-ориентированного проектирования на основе платформы Java-приложений Spring . Он прозрачно поддерживает все доступные реализации JPA и поддерживает операции CRUD , а также удобное выполнение запросов к базе данных. [13] : 47 [14]
История версий
[ редактировать ]JPA 2.0
[ редактировать ]Разработка новой версии JPA 2.0 была начата в июле 2007 года в процессе сообщества Java под названием JSR 317. JPA 2.0 был утвержден как окончательная 10 декабря 2009 года. Целью JPA 2.0 было рассмотрение функций, которые присутствовали в некоторых популярных версиях JPA 2.0. Поставщики ORM, но не смогли получить консенсусное одобрение для JPA 1.0.
Основные включенные функции:
- Расширенная функциональность объектно-реляционного сопоставления
- Поддержка коллекций встроенных объектов, связанных в ORM отношением «многие к одному».
- Упорядоченные списки
- Комбинации типов доступа
- API запроса критериев
- Стандартизация подсказок SQL
- Стандартизация дополнительных метаданных для поддержки DDL. генерации
- Поддержка проверки
- Поддержка общего кэша объектов.
Поставщики, поддерживающие JPA 2.0:
- Бату JPA
- DataNucleus (ранее JPOX)
- EclipseLink (ранее Oracle TopLink )
- IBM для сервера приложений WebSphere [15]
- JBoss с Hibernate
- ОбъектБД
- OpenJPA
- ОриентБД
- Versant Corporation JPA ( база данных объектов ) [16]
JPA 2.1
[ редактировать ]Разработка версии JPA 2.1 началась в июле 2011 года под названием JSR 338. Версия JPA 2.1 была утверждена как окончательная 22 мая 2013 года.
Основные включенные функции:
- Конвертеры, которые позволяют выполнять пользовательские преобразования кода между типами базы данных и объектов.
- Обновление/удаление критериев, чтобы разрешить массовые обновления и удаления через API критериев.
- Графы сущностей для частичного или заданного извлечения или объединения объектов.
- Улучшения JPQL/Criteria, такие как арифметические подзапросы, общие функции базы данных, предложение join ON и опция TREAT.
- Генерация схемы
- Поддержка хранимых процедур
Поставщики, поддерживающие JPA 2.1:
- DataNucleus
- ЗатмениеСсылка
- Спящий режим
- OpenJPA (начиная с версии 2.2.0)
JPA 2.2
[ редактировать ]Разработка JPA 2.2, выпуска обслуживания, началась в 2017 году в соответствии с JSR 338. Проверка обслуживания была утверждена 19 июня 2017 года.
Основные включенные функции:
- Добавление @Repeatable ко всем соответствующим аннотациям.
- Поддержка аннотаций JPA для использования в метааннотациях.
- Потоковая передача результатов запроса
- Способность AttributeConverters быть инъецируемыми CDI.
- Поддержка типов даты и времени Java 8.
Поставщики, поддерживающие JPA 2.2:
- DataNucleus (начиная с версии 5.1)
- EclipseLink (начиная с версии 2.7)
- Спящий режим (начиная с версии 5.3)
- OpenJPA (начиная с версии 3.0.0)
Джакарта Персистенция 3.0
[ редактировать ]JPA был переименован в Jakarta Persistence в 2019 году, а версия 3.0 была выпущена в 2020 году. Это включало переименование пакетов и свойств с javax.persistence на jakarta.persistence.
Поставщики, поддерживающие Jakarta Persistence 3.0:
- DataNucleus (начиная с версии 6.0)
- EclipseLink (начиная с версии 3.0)
- Спящий режим (начиная с версии 5.5)
Джакарта Настойчивость 3.1
[ редактировать ]Версия 3.1 вышла в 2022 году. [1] Он является частью Jakarta EE 10, поэтому для его запуска требуется как минимум Java 11. Он добавляет улучшенную обработку UUID, различные новые функции JPQL для математических вычислений и обработки даты/времени, а также другие небольшие изменения. [17]
Поставщики, поддерживающие Jakarta Persistence 3.1:
- DataNucleus (начиная с версии 6.0)
- EclipseLink (начиная с версии 4.0) [18]
- Спящий режим (начиная с версии 6.0) [19]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с «Джакартское упорство 3.1» . Джакарта.ee . Проверено 27 июля 2022 г.
- ^ «Урок по JavaEE 6» . Оракул.
- ^ «Урок по JavaEE 7» . Оракул.
- ^ Hibernate EntityManager: среды Java SE
Hibernate EntityManager: получение EntityManager в среде Java SE - ^ «Джакартское упорство» . Джакарта.ee . Проверено 05 октября 2021 г.
- ^ «Члены JSR 220» .
- ^ Баррето, Чарльтон. «SDO и JPA» . Цифровая прогулка . Архивировано из оригинала 13 августа 2011 года . Проверено 5 мая 2011 г.
- ^ Эдвардс, Майк. «SDO и архитектура сохранения Java (JPA)» . Откройте СОА . osoa.org . Проверено 5 мая 2011 г.
- ^ «hibernate.org — Сохранение Java с помощью Hibernate» . Джей Босс . Проверено 17 ноября 2008 г.
Hibernate реализует объектный/реляционный javaAPI Java Persistence и интерфейсы управления постоянством.
- ^ Сохранение Java в Hibernate . Публикации Мэннинга. 8 ноября 2015 г. ISBN 9781617290459 . Проверено 8 декабря 2013 г.
Гэвин Кинг — основатель проекта Hibernate
- ^ «JBoss.com — Лидерство отрасли» . Джей Босс . Проверено 17 ноября 2008 г.
JSR 220, Комитет по спецификациям EJB 3.0, Гэвин Кинг, Билл Берк, Марк Флери
- ^ «Часто задаваемые вопросы по Java Persistence API» . Сан Микросистемс. Архивировано из оригинала 22 августа 2008 г. Проверено 1 июля 2010 г.
Java Persistence API опирается на лучшие идеи таких технологий сохранения, как Hibernate, TopLink и JDO.
- ^ Дейнум и др. 2014
- ^ «Spring Data — Сайт проекта» . Ключевой . Проверено 26 февраля 2018 г.
- ^ «Пакет функций IBM WebSphere Application Server V7 для приложений OSGi и API сохранения Java» . Скачать веб-сайт . ИБМ. 27 апреля 2010 г. Проверено 8 декабря 2013 г.
- ^ «Двухэтапная загрузка Versant JPA» . Скачать веб-сайт . Актиан . Проверено 8 декабря 2013 г.
- ^ «Что нового в Jakarta Persistence 3.1» . Фонд Эклипс.
- ^ «Результаты TCK EclipseLink» . Фонд Эклипс . Проверено 27 июля 2022 г.
- ^ «Серия Hibernate ORM 6.0» . hibernate.org . Проверено 27 июля 2022 г.
Дальнейшее чтение
[ редактировать ]- Дейнум, Мартен; Рубио, Дэниел; Лонг, Джош; Мак, Гэри (1 сентября 2014 г.). Весенние рецепты: подход к решению проблем (второе изд.). Апресс . ISBN 978-1-4302-2499-0 .
Внешние ссылки
[ редактировать ]
Общая информация
[ редактировать ]- Официальный сайт
- Документация для окончательной версии спецификации EJB3 (называемой JSR220).
- Страница Persistence GlassFish
- Страница персистентности JCP