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.
