metoda get().

Jeśli chcesz uzyskać obiekt według jego identyfikatora (lub klucza podstawowego), Hibernate ma do tego trzy metody:

  • obciążenie()
  • Dostawać()
  • znajdować()

Robią to samo, ale są niuanse. Ogólny format metody get() to:

EntityClass Name = session.get(EntityClass.class, Object primaryKey);

Metoda get() przyjmuje jako drugi parametr identyfikator (klucz podstawowy) obiektu, który ma zwrócić. Następnie ładuje ten obiekt z bazy danych i zwraca go. Przykład:

User user = session.get(User.class, 2);

Jeśli rekord o tym identyfikatorze nie zostanie znaleziony w bazie danych, wówczas metoda zwróci wartość null.

metoda load().

Drugą metodą ładowania obiektu jest metoda load() . Ogólny format metody load() jest taki sam:

EntityClass Name = session.load(EntityClass.class, Object primaryKey);

Jednak jej zachowanie różni się od metody get() .

Po pierwsze, ta metoda nie zwraca rzeczywistego obiektu, ale proxy: wirtualny kod pośredniczący.

Po drugie, przy użyciu metody load() nie ma sprawdzania, czy taki wpis istnieje w bazie danych. Zamiast tego Hibernate natychmiast tworzy obiekt proxy z przekazanym identyfikatorem i zwraca go.

Po trzecie, cała praca z bazą danych będzie miała miejsce podczas wywoływania metod obiektu proxy. Jeśli spróbujesz wywołać np. metodę getName() , to nastąpi pierwsze wywołanie bazy danych. Przykład:

User user = session.load(User.class, new Integer(123));
String name = user.getName(); //this is where the first call to the database will occur

Metoda load() nie powinna być używana do sprawdzania obecności obiektów w bazie danych - po prostu tego nie pokaże. Ponadto, jeśli przekażesz mu nieprawidłowy identyfikator, taki jak null, po prostu zwróci on wartość null.

metoda find().

Metoda find() została przekazana do interfejsu Session ze standardu JPA. A jak wiadomo, ten standard opisuje nie tylko sygnaturę metod, ale także reguluje zachowanie.

Ta metoda działa dokładnie tak, jak metoda get() . Jeśli obiekt nie został znaleziony przez przekazany klucz, metoda po prostu zwróci wartość null.

User user = session.find(User.class, -2); //method will return null

odśwież() metodę

Inną przydatną metodą, która ma związek z ładowaniem obiektu z bazy danych, jest metodafresh () .

Pamiętasz metodępersist() , która aktualizowała dane w bazie danych na podstawie przekazanego obiektu? Tak więc metodafresh() działa dokładnie odwrotnie: aktualizuje istniejący obiekt na podstawie danych z bazy danych.

Takie zachowanie jest konieczne, jeśli np. podczas zapisywania obiektu do bazy danych wywoływane są tam różne procedury składowane, które poprawiają zapisane dane.

W takich przypadkach przydatne może być ponowne odczytanie obiektu z bazy danych, jeśli istnieje prawdopodobieństwo, że uległ on zmianie. Przykład:

User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //Force called SQL INSERT and call triggers

session.refresh(user);
// here we continue to work with the updated object