10 июня 2022 2542
Это вторая часть нашей серии статей об объектно-реляционном отображении с помощью JPA, Hibernate и Spring Data JPA. На этот раз мы рассмотрим вопрос об обеспечении постоянного хранения (персистентности) с помощью JPA.
Постоянное хранение данных с помощью JPA

Приложение JPA

Сегодня мы напишем приложение JPA для сохранения записи в базе данных и ее извлечения. А сделаем это на машине, на которой выполняется код, установлены MySQL Release 8.0 и база данных с именем CSCS.

Начнем с настройки JPA, Hibernate и других необходимых зависимостей. Исходный код контролируется Apache Maven. Мы декларируем следующие зависимости:


Листинг 1. Зависимости Maven от Hibernate, JUnit Jupiter и MySQL:

JPA скриншот №1

 

Модуль hibernate-entitymanager содержит транзитивные зависимости от других модулей, которые нам понадобятся, таких как hibernate-core заглушки интерфейса JPA.

Нам потребуется зависимость junit-jupiter-engine для выполнения тестов JUnit 5, а также зависимость mysql-connector-java, официальный драйвер JDBC для MySQL.

Вставляем в наш код блок постоянного хранения. Он содержит параметры настройки, в том числе провайдера персистентности, сведения о подключаемой базе данных, классы сущностей, используемый диалект SQL, учетные данные, форматирование SQL и др. Для приложений JPA требуется один или несколько блоков постоянного хранения.

 

Блок постоянного хранения

Файл persistence.xml находится в resources/META-INF/. Его содержимое выглядит следующим образом:


Листинг 2. Файл конфигурации persistence.xml

JPA скриншот №2.png


  • Поскольку JPA — это только спецификация, нам необходимо указать связанную с вендором реализацию PersistenceProvider для API. Определяемая нами персистентность поддерживается провайдером Hibernate. #1
  • Указываем свойства JDBC properties - драйвер #2, URL базы данных #3, имя пользователя #4 и пароль #5 для доступа. На машине, на которой выполняются программы, установлена база данных MySQL 8, и для доступа используются учетные данные из файла persistence.xml.
  • Диалект Hibernate — MySQL8 #6, так как мы будем взаимодействовать с базой данных MySQL Release 8.0.
  • Каждый раз, когда выполняется программа, база данных создается заново с нуля #7. Это идеально для автоматизированного тестирования, когда нам для запуска каждого теста нужна чистая база данных.

 

Персистентный класс

Реализуемое приложение имеет персистентный класс Item:



Листинг 3. Класс Item

JPA скриншот №3.png


  • Для персистентных классов необходимо использовать аннотацию @Entity #1, чтобы указать, что они соответствуют таблице базы данных. Если имя таблицы не указано, этот класс будет по умолчанию отображаться на таблицу с именем ITEM.
  • Для персистентных классов необходимо использовать аннотацию @Id #2, чтобы указать соответствие первичному ключу таблицы базы данных. Этот атрибут будет отображаться на столбец ID.
  • Аннотация @GeneratedValue указывает на автоматическую генерацию первичных ключей #3. Здесь можно использовать самые разные стратегии в зависимости от базы данных: поля идентификации, значения, полученные от последовательности, или таблица.
  • Атрибуты будут отображаться в столбцы таблицы. Если имя столбца не указано, атрибут info #4 будет по умолчанию отображаться в столбец с именем INFO.


Сохранение и извлечение записей

Давайте сохраним новую запись в базу данных.

 

Листинг 4. Класс ItemJPATest

JPA скриншот №4.png


  • Для доступа к базе данных #1 нам нужна фабрика EntityManagerFactory. Эта фабрика соответствует блоку постоянного хранения, который мы определили ранее.
  • Создаем EntityManager и запускаем новую сессию базы данных #2.
  • Получаем доступ к API для стандартных транзакций и начинаем транзакцию #3.
  • Создаем новый экземпляр класса Item и устанавливаем его свойство info #4.
  • Экземпляр класса во временном состоянии становится персистентным на стороне контекста персистентности #5.
  • Подтверждаем транзакцию #6. Теперь в таблицу ITEM добавлен новый ряд. Доступ к базе данных должен быть транзакционным, даже если она только для чтения.
  • После создания EntityManager его необходимо закрыть #7.
  • После создания EntityManagerFactory его необходимо закрыть #8.
  • В приложении JPA нет кода SQL и не используется JDBC. В коде Java нет операций CRUD (create, read, update, delete), но можно работать объектно-ориентированным способом с классами, объектами и методами. Перевод на каждый диалект SQL осуществляется посредством объектно-реляционного отображения (ORM), которое также используется для переносимости.

Интересно и программирование с помощью Java или хотите прокачать свои навыки? Регистрируйтесь на наши тренинги и получите скидку 10% для всех физлиц!

 



Последние статьи в блоге

Искусственный архитектор: как нейросети справляются с проектированием ПО

В этой статье расскажем про большие языковые модели в приложении к работе архитектора ПО. Вместе мы посмотрим, насколько хорошо GPT понимает ИТ-архитектуру и сможет ли уже сегодня заменить архитектора. Пора разобраться, насколько глубоко ИИ может встроиться в рабочие процессы архитектора ПО — и стоит ли ему там оставаться.

Новости
24 апреля 2026

Бабушка с долгом в полмиллиона, однопоточное ядро и другие грабли: как не повторить чужие архитектурные ошибки

Любая система рано или поздно проверяется на прочность: нагрузкой, ростом бизнеса или человеческим фактором. Именно в эти моменты всплывают решения, которые казались безобидными на старте. Ниже — реальные кейсы из практики, где небольшие архитектурные допущения со временем превращались в ощутимые проблемы. Разберем, какие сигналы можно было заметить сразу и что стоит учитывать, чтобы не повторить эти сценарии в своих проектах.

Новости
16 апреля 2026

Как защитить информацию в приложениях, использующих ИИ

Представим, что системы контроля и анализа транзакций в банке начинают игнорировать 30% мошеннических операций. Система управления энергосетью выводит из строя ключевой узел подачи электроэнергии в город. Чат-бот службы поддержки начинает массово раскрывать персональные данные клиентов. К сожалению, это новая реальность, с которой может столкнуться любая компания, интегрирующая ИИ-системы в бизнеспроцессы.

Новости
08 апреля 2026

Java без розовых очков: какие знания отделяют грейды

Почти каждый разработчик рано или поздно задается вопросом: «Я уже Middle или все еще уверенный Junior?» Опыт растет, задач становится больше, стек шире — но вместе с этим появляется и иллюзия, что раз ты пишешь на Java каждый день, значит, язык знаешь.

Новости
23 марта 2026

ИИ против джуна: как победить нейросети при устройстве на работу

Начинающим разработчикам и раньше было непросто найти первую работу, а сейчас и подавно: конкуренция выросла кратно, а рынок окончательно стал «рынком работодателя».

11 марта 2026

Мартовский апгрейд: обновляем компетенции со скидкой 20% и приятными бонусами

Март — традиционное время не только для обновления природы, но и для профессионального роста. С 1 по 31 марта 2026 года у нас действует акция «Мартовский апгрейд».

05 марта 2026

Февраль 2026: Разбираем тренды, прокачиваем архитектуру и учимся договариваться с ИИ. Бесплатные вебинары для ИТ-специалистов

Февраль — месяц, когда уже видны цели на год, но еще есть время скорректировать курс и зарядиться новыми знаниями.

Новости
06 февраля 2026

Как ИТ-компании могут компенсировать до 10 млн ₽ на обучении сотрудников в 2026 году

Как аккредитованный учебный центр, специализирующийся на подготовке ИТ-специалистов, мы не только проводим программы дополнительного профессионального образования, но и помогаем корпоративным клиентам корректно оформить документы для участия в программе «Субсидия на обучение сотрудников» Департамента предпринимательства и инновационного развития города Москвы. В этой статье — структурированный обзор условий, требования к компаниям и сотрудникам, а также как мы можем помочь вам при подаче заявки.

Жизнь компании
20 января 2026

Архитекторы vs Рутина: Как открытый вебинар за 2 недели превратился в кастомный ИИ-интенсив

В Учебном центре IBS мы регулярно проводим бесплатные вебинары для ИТ-специалистов. Это наша философия — делиться реальными знаниями, а не просто давать рекламу. Один из таких вебинаров, посвященный практическому применению ИИ в инженерии, посетили сотрудники крупной компании — лидера в спортивном ритейле.

12 января 2026

Чистая выдумка: Как придумать класс, которого нет, и спасти проект от хаоса

Знакомо: вы описываете требования, рисуете сущности — Клиент, Заявка, Документ… А потом система превращается в «комок» с сильной связанностью (big ball of mud), где любое изменение стоит как полпроекта?

Новости
16 декабря 2025

Федеральное признание: нашу программу по системному анализу признали лучшей ИТ-программой в стране

Программа Учебного центра IBS «Системный аналитик. Уровень Специалист» признана лучшей ИТ-программой онлайн-обучения в России по итогам премии «СМАРТ ПИРАМИДА — 2025»!

16 декабря 2025

Бизнес-аналитик 2.0: как меняется профессия и какие навыки теперь нужны

Когда-то бизнес-аналитик ассоциировался с человеком, который «пишет ТЗ». Сегодня этого явно недостаточно. Современный БА — это стратег, коммуникатор и системный мыслитель, который одинаково уверенно чувствует себя в бизнес-контексте и технических деталях. Чтобы не застрять в прошлом, важно понимать, как эволюционирует роль аналитика и какие компетенции становятся критически важными.

Новости
05 декабря 2025

Обратная сторона Event-Driven: Почему Мартин Фаулер призывает к осторожности?

Вы узнаете один из 4 ключевых паттернов EDA и поймете, как избежать главной ловушки, в которую попадают многие команды.

Новости
25 ноября 2025

Скидка 30% на 8 курсов декабря

Год близится к завершению, и пока другие подводят итоги, вы можете сделать самую выгодную инвестицию — в себя. Мы собрали 8 курсов со скидкой 30%*, которые стартуют в начале декабря, чтобы вы могли точно успеть пройти обучение до конца года и прийти к новым карьерным целям с обновлённым стеком технологий.

Новости
20 ноября 2025

Осенний апдейт карьеры: от -30% до -50% на курсы ноября!

Только сейчас: скидки от 30% до 50%* на ноябрьские курсы для тех, кто хочет быть на шаг впереди в IT. Практические программы помогут укрепить ключевые навыки и выйти на новый уровень профессиональной зрелости. Успейте подать заявку, чтобы воспользоваться предложением.

Новости
23 октября 2025

Как одновременно заварить кофе для 10 000 сотрудников — и еще 7 неожиданных вопросов архитектору ПО

Как убедить заказчика отказаться от Excel, зачем архитектору опыт кодинга и почему эволюция ПО похожа на эволюцию живых существ?

Новости
21 октября 2025

Как живые вебинары повышают эффективность ИТ-обучения

ИТ-рынок сегодня меняется стремительнее, чем когда-либо: появляются новые технологии, фреймворки и подходы.

Новости
06 октября 2025

ИИ в разработке ПО: преимущество или риск

Инструменты на базе искусственного интеллекта все чаще используются при создании программного обеспечения. Рассмотрим, какие задачи помогает решать ИИ и какие опасности несет

Новости
24 сентября 2025

Чему нас учит ИИ: как стать идеальным сотрудником

Сейчас чаще говорят об этике использования ИИ — как не получить плагиат или не доверить слишком много, но при этом редко задумываются о другой стороне медали: этична ли наша работа?

Новости
12 сентября 2025

Как ИИ действительно влияет на продуктивность разработчика: неожиданные выводы из исследований

За последние пару лет у многих разработчиков в редакторах и IDE поселились новые «напарники» — всевозможные ИИ-инструменты. Обещания были впечатляющие: меньше рутины, быстрее релизы, код пишется почти сам. Но когда первые восторги улеглись и появились системные исследования, стало ясно: эффект от ИИ далеко не такой однозначный. Где-то он действительно ускоряет работу команд на 20%, а где-то, наоборот, тормозит опытных инженеров. И вот парадокс: даже там, где выигрыш в скорости очевиден, бизнес не всегда чувствует, что проекты двигаются быстрее.

Новости
08 сентября 2025

Нужна помощь? Оставьте заявку, и мы свяжемся с вами в ближайшее время

Согласен получать на e-mail информационные рассылки о новостях Учебного центра IBS
Корпоративное обучение Оценка персонала Сертификация О нас Стать тренером Блог Личный кабинет
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.