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.