JPA #5 - Pierwsza encja

JPA #5 – Pierwsza encja

Na warsztat trafia pierwsza encja. Stworzymy klasę z prostymi danymi naszych pierwszych gości. Po dodaniu tylko trzech adnotacji zobaczysz jak JPA automatycznie zaczyna tworzyć tabele z wskazanymi polami i sekwencję do nadawania unikalnych id.

Dla przypomnienia encja jest to taka klasa, której obiekty będą zapisywane poprzez Entity Manager do bazy danych.

W naszej paczce pl.clockworkjava.hotelreservation.jpa stwórz kolejną klasę w Javie i nazwij ją Guest (zgodnie z regułą, że nazywamy je po angielsku).

W naszym hotelu na razie będziemy oryginalni i od gościa poprosimy jedynie imię i wiek.

Proszę stwórz więc pola prywatne dla zmiennej typu String, gdzie zanotujemy jego imię oraz zmienną int, w której przechowamy jego wiek. Dorzuć od razu konstruktor, który przyjmuje oba te argumenty.

Kod powinien wyglądać zatem tak:

package pl.clockworkjava.hotelreservation.jpa;

public class Guest {

    private String name;
    private int age;

    public Guest(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Tworzymy pierwszą encję

Pierwszą czynnością aby nasza klasa była oznaczona jako encja jest dodanie adnotacji @Entity. Powinna się pokazać możliwość importowania z dwóch miejsc – javax.persistence i org.hibernate.annotations. Jak długo korzystamy ze standardu JPA używamy javax.persistence (a druga opcja powinna pojawić się przekreślona dla ułatwienia wyboru).

Dobrą praktyką jest korzystanie ze standardu JPA a nie konkretnych implementacji – oczywiście tam gdzie jest to możliwe.

W drugiej kolejności potrzebujemy nadać unikalny identyfikator ID, który musi mieć każda encja.

Na przykładzie naszych hotelowych gości takim ID mógłby być PESEL, który w kontekście Polski stanowi unikalny identyfikator. Tylko co jeśli nasz gość nie pochodzi z naszego kraju?

Lepiej na potrzeby ID, czyli klucza głównego tabeli, w której trzymamy dane, stworzyć osobne pole z generowanym numerem. Nawet jeśli wydaje nam się, że mamy jakiś “naturalny”, unikalny identyfikator.

Kod pola id oraz adnotacja @ID
Kod pola id oraz adnotacja @ID

Zatem tworzymy nasz id (który jest przeważnie zmienna typu long) i dodajemy do niego od razu adnotację @ID (także z javax.presistence).

Dodatkowo dodajmy także adnotację powiązaną czyli @GeneratedValue (oczywiście z javax.presistence), które mówi nam, że dane pole ma być generowane w jakiś sposób. Najczęściej chcemy, żeby to baza zadecydowała o tym jaki sposób generacji wartości dla klucza jest najwygodniejszy . Dajemy więc pole strategy i wybieramy GenerationType.AUTO

package pl.clockworkjava.hotelreservation.jpa;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Guest {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    private String name;
    private int age;

    public Guest(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Co się dzieje w aplikacji

Czas sprawdzić co zrobiliśmy. Odpal aplikację i zobacz log w dolnym oknie. Są pewne zmiany w porównaniu z poprzednim.

Log App oraz informacje zwracane z META-INF/persistence.xml
Log App oraz informacje zwracane z META-INF/persistence.xml

Super. Już widać, że nasze ustawienia coś dają. Najpierw widać, że baza danych jest zawsze usuwana a następnie tworzona nowa – bo tak sobie zażyczyliśmy.

Dodatkowo widzimy od czego zacznie się liczenie id – jak widać powyżej od 1 i będzie zwiększane o 1. To w jaki sposób będą naliczane może zależeć od baz danych.

Podsumowanie

Na ten moment zatem mamy skonfigurowane połączenie z bazą danych (H2). Do tego stworzyliśmy wspólnie pierwszą encję, czyli klasę której obiekty będą mogły być zapisywane poprzez Hibernate. Przy wpisaniu zaledwie trzech adnotacji JPA automatycznie zaczyna tworzyć tabele i sekwencję do nadawania unikalnych id.

Kod aplikacji znajdziesz w publicznym repozytorium GitHub.

By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie 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.

Pozostałe artykuły z cyklu:

  1. Czym jest persystencja?
  2. ORM, JPA i Hibernate
  3. Podstawowe elementy
  4. Konfiguracja projektu
  5. Pierwsza encja
  6. Create
  7. Read
  8. Update
  9. Delete
  10. Relacja One-to-One
  11. Relacja One-to-Many

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *