get() methode

Als u een object op basis van zijn ID (of primaire sleutel) wilt ophalen, heeft Hibernate hiervoor drie methoden:

  • laden()
  • krijgen()
  • vinden()

Ze doen hetzelfde, maar er zijn nuances. Het algemene formaat van de methode get() is:

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

De methode get() neemt als tweede parameter de ID (primaire sleutel) van het object dat moet worden geretourneerd. Het laadt vervolgens dat object uit de database en retourneert het. Voorbeeld:

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

Als een record met dit ID niet in de database wordt gevonden, retourneert de methode null.

load() methode

De tweede methode voor het laden van een object is de methode load() . De algemene indeling van de methode load() is hetzelfde:

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

Het gedrag ervan verschilt echter van de methode get() .

Ten eerste geeft deze methode geen echt object terug, maar een proxy: een virtuele stub.

Ten tweede, wanneer de methode load() wordt gebruikt , wordt er niet gecontroleerd of er een dergelijke vermelding in de database aanwezig is. In plaats daarvan maakt Hibernate onmiddellijk een proxy-object met de doorgegeven ID en retourneert het.

Ten derde zal al het werk met de database plaatsvinden bij het aanroepen van de methoden van het proxy-object. Als u bijvoorbeeld de methode getName() probeert aan te roepen , vindt de eerste aanroep van de database plaats. Voorbeeld:

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

De methode load() moet niet worden gebruikt om te controleren op de aanwezigheid van objecten in de database - dit wordt eenvoudigweg niet weergegeven. Bovendien, als u een ongeldige ID, zoals null, doorgeeft, zal het eenvoudigweg null retourneren.

vind() methode

De methode find() is vanuit de JPA-standaard doorgegeven aan de Session- interface . En zoals u weet, beschrijft deze standaard niet alleen de ondertekening van methoden, maar reguleert ook het gedrag.

Deze methode werkt precies zoals de methode get() . Als het object niet is gevonden met de doorgegeven sleutel, retourneert de methode gewoon null.

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

vernieuwen() methode

Een andere handige methode die te maken heeft met het laden van een object uit een database is de methode refresh() .

Weet je nog de persist() methode die de gegevens in de database bijwerkte op basis van het doorgegeven object? De methode refresh() werkt dus precies het tegenovergestelde: het werkt een bestaand object bij op basis van gegevens uit de database.

Dit gedrag is nodig als bijvoorbeeld bij het schrijven van een object naar de database daar verschillende opgeslagen procedures worden aangeroepen die de geschreven gegevens corrigeren.

In dergelijke gevallen kan het handig zijn om het object opnieuw uit de database te lezen als de kans bestaat dat het is gewijzigd. Voorbeeld:

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