JPA — операции INSERT, UPDATE, DELETE. Примеры запросов вставки, удаления, обновления на JPQL.

Операции вставки, удаления и обновления данных в базе данных с использованием JPA выполняются достаточно просто.

Используемые технологии
  • Spring 4.1.5.RELEASE
  • Hibernate 5.0.1.Final
  • JPA 2.1
  • MySQL 5.6.25
  • IntelliJ IDEA 14
  • Maven 3.2.5

1. Структура проекта

Весь код и таблицы из JPA – пример приложения Hello World.

2. Изменения в классах сущностей для возможности операций вставки, удаления и обновления.

Сущностные классы из указанного выше проекта подверглись изменениям. Класс ContactEntity:

Добавлена аннотация @GeneratedValue(strategy = GenerationType.IDENTITY), которая указывает на стратегию создания id при вставке новых данных.

Добавлена аннотация @Temporal(TemporalType.DATE), которая позволяет использовать java.util.Date вместо sql.Date.

Класс ContactTelDetailEntity изменился аналогичным образом:

3. JPA — вставка данных (insert) с помощью метода persist()

Операция вставки производится очень легко. Приведу пример сервиса с методами вставки, удаления и обновления ContactService:

Его реализация ContactServiceImpl:

Чтобы вставить запись или обновить ее используем метод save(). Сначала проверяется существование id у контакта, если его нет, то выполняем операцию persist(). Когда вызывается метод persist(), диспетчер сущностей (EntityManager) сохранит сущность и сделает ее управляемым экземпляром в рамках контекста постоянства. Если значение id существует, значит, производится обновление, и тогда будет вызван метод EntityManager.merge(). При вызове метода merge() диспетчер сущностей объединит состояние сущности с текущим контекстом постоянства.

3.1 Тестирование операции вставки

Добавляем данные в сущность контакт и вызываем метод save(). Произойдет вставка данных в базу данных.

4. JPA — обновление данных (update) с помощью метода merge()

Используем тот же insertUpdateExample() из прошлого примера и объект contact, который только что добавили в базу данных. Обновляем данные имени и фамилии, а так же записываем объект с деталями телефона. Далее его удаляем из контакта и вызываем метод save(). В этот раз будет вызван метод merge() из ContactServiceImpl.

Данные имени и фамилии будут обновлены, но так же будет удален телефон, связанный с этим контактом. Это возможно, т.к. в ассоциации один-ко-многим выставлен атрибут orphanRemoval=true, который указывает поставщику JPA (в нашем случае Hibernate) на необходимость удаления всех висячих записей, существующих в базе данных, но не принадлежащих какому-либо сохраненному объекту.

5. JPA — удаление данных с помощью метода remove()

Операция удаления в JPA производится в несколько строк:

Будет вызван метод EntityManager.remove() и объект с указанным id будет удален из базы данных. Будет удалена так же вся связанная информация — детали телефонных номеров и хобби, поскольку в сущности указано cascade=CascadeType.ALL.

 

Исходные коды

JPA Tutorial — insert, delete,update

JPA insert delete SQL

Share Button
5
2999 Total Views 1 Views Today

Добавить комментарий