get() metódus

Ha egy objektumot az azonosítója (vagy elsődleges kulcsa) alapján szeretne lekérni, akkor a hibernálás három módszert kínál erre:

  • Betöltés()
  • kap()
  • megtalálja()

Ugyanazt csinálják, de vannak árnyalatok. A get() metódus általános formátuma :

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

A get() metódus második paramétereként annak az objektumnak az azonosítóját (elsődleges kulcsát) veszi, amelyet vissza kell adnia. Ezután betölti az objektumot az adatbázisból, és visszaadja. Példa:

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

Ha az ilyen azonosítójú rekord nem található az adatbázisban, akkor a metódus nullát ad vissza.

load() metódus

Az objektumok betöltésének második módja a load() metódus . A load() metódus általános formátuma ugyanaz:

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

A viselkedése azonban eltér a get() metódustól .

Először is, ez a metódus nem valódi objektumot ad vissza, hanem proxyt: egy virtuális csonkot.

Másodszor, a load() metódus használatakor nincs ellenőrzés, hogy van-e ilyen bejegyzés az adatbázisban. Ehelyett a Hibernate azonnal létrehoz egy proxyobjektumot az átadott azonosítóval, és visszaadja azt.

Harmadszor, az adatbázissal végzett minden munka a proxy objektum metódusainak meghívásakor történik. Ha megpróbálja meghívni például a getName() metódust , akkor megtörténik az adatbázis első hívása. Példa:

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

A load() metódus nem használható objektumok jelenlétének ellenőrzésére az adatbázisban – egyszerűen nem fogja ezt megjeleníteni. Ezenkívül, ha érvénytelen azonosítót ad át neki, például nullát, akkor egyszerűen nullát ad vissza.

find() metódus

A find() metódus a JPA szabványból került át a Session interfészre . És mint tudod, ez a szabvány nemcsak a módszerek aláírását írja le, hanem a viselkedést is szabályozza.

Ez a metódus pontosan úgy működik, mint a get() metódus . Ha az objektumot nem találta meg az átadott kulcs, akkor a metódus egyszerűen nullát ad vissza.

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

refresh() metódus

Egy másik hasznos módszer, amely egy objektum adatbázisból való betöltésével kapcsolatos, a refresh() metódus .

Emlékszel a persist() metódusra , amely az átadott objektum alapján frissítette az adatbázisban lévő adatokat? Tehát a refresh() metódus pontosan az ellenkezője működik: frissít egy meglévő objektumot az adatbázisból származó adatok alapján.

Erre a viselkedésre akkor van szükség, ha például egy objektum adatbázisba írásakor ott különféle tárolt eljárásokat hívnak meg, amelyek javítják az írott adatokat.

Ilyen esetekben hasznos lehet az objektum újraolvasása az adatbázisból, ha van esély arra, hogy megváltozott. Példa:

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