JPA i Hibernate #9 - Delete

JPA #9 – Delete

Kolejnym w naszej kolejce do zapoznania się jest Delete, czyli kasowanie danych w bazie danych, które zamyka nam wszystkie operacje z CRUD.

Usunięcie danych z bazy danych

Kasowanie jest już ostatnią rzeczą, która brakuje nam do podstawowych funkcjonalności programu. Zaczynamy od uruchomienia tej metody w głównej klasie App.

package pl.clockworkjava.hotelreservation.jpa;

public class App {

    public static void main(String[] args) {
        GuestRepository repo = new GuestRepository();
        repo.createNewGuest("Paweł", 34);
        Guest guest = repo.findById(1);
        repo.updateAge(guest, 35);
        repo.delete(guest);
    }
}

Tworzymy także metodę w GuestRepository. Skoro ma zmieniać coś w bazie danych to musimy skorzystać z transakcji – bez zaskoczenia tutaj.

W metodzie delete() rozpocznij transakcję. Dokładnie tak jak w przypadku create i update, więc powinno pójść gładko. Do kasowania danych użyj em.remove(guest); i oczywiście stwórz do tego metodę. Tradycyjnie dla przejrzystości wrzuć informację o czynności czyli –DELETE–

Mam nadzieję, że udało się napisać juz prawie z pamięci opakowanie akcji w transakcję. Zerknij czy poniższy kod się zgadza.

Powinien wyglądać tak:

package pl.clockworkjava.hotelreservation.jpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class GuestRepository {

    private static EntityManagerFactory factory = Persistence.createEntityManagerFactory("thePersistenceUnit");
    private static EntityManager em  = factory.createEntityManager();

    public void createNewGuest(String name, int age) {

        Guest newOne = new Guest(name, age);

        EntityTransaction transaction = em.getTransaction();

        transaction.begin();

        em.persist(newOne);

        transaction.commit();
    }

    public Guest findById(long i) {
        return em.find(Guest.class, i);
    }

    public void updateAge(Guest guest, int newAge) {
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        guest.setAge(newAge);
        transaction.commit();
    }

    public void delete(Guest guest) {
        EntityTransaction transaction = em.getTransaction();
        System.out.println(" -------- DELETE --------");
        transaction.begin();
        em.remove(guest);
        transaction.commit();
    }
}

Po odpaleniu aplikacji w konsoli uzyskamy komunikat, że usunęliśmy dane nie tylko z Persistence Context, ale także z bazy danych.

 -------- DELETE --------
Hibernate: /* delete pl.clockworkjava.hotelreservation.jpa.Guest */ delete from Guest where id=?

Podsumowanie CRUD

W ten sposób przeszliśmy przez wszystkie procesy w rodzinie CRUD i czas na ich podsumowanie zbiorowe.

Create – tworzenie i zapis danych do bazy danych – użyliśmy em.persist(); i opakowaliśmy ją w transakcję

Read – odczytywanie z bazy danych – użyliśmy em.find(); i konstruktora bez argumentów do utworzenia obiektu z wyciągniętych danych.

Update – aktualizacja danych – podmieniamy dane, na obiekcie który nas interesuje przez co także musimy wykorzystać transakcję i w naszym wypadku podmiana nastąpiła poprzez guest.setAge(newAge)

Delete – kasowanie danych z Persistence Context i bazy danych – za pomocą em.remove(); opakowaną transakcją.

Kod aplikacji znajdziesz w publicznym repozytorium GitHub.

By być na bieżąco i mieć realny wpływ na tematykę tworzonych artykułów zapraszam do dołączenia do mojego newslettera.


Informacje oparte zostały o materiał darmowego kursu wprowadzającego w świat JPA i Hibernate “Fundamenty JPA i Hibernate” dostępnego w formie wideo na platformie ClockworkJava.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *