get() metoden

Hvis du ønsker å få et objekt med ID (eller primærnøkkel), har Hibernate tre metoder for dette:

  • laste()
  • få()
  • finne()

De gjør det samme, men det er nyanser. Det generelle formatet til get() -metoden er:

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

Get()- metoden tar som sin andre parameter ID-en (primærnøkkelen) til objektet den må returnere. Den laster deretter objektet fra databasen og returnerer det. Eksempel:

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

Hvis en post med denne IDen ikke finnes i databasen, vil metoden returnere null.

load() metode

Den andre metoden for å laste et objekt er load()- metoden . Det generelle formatet til load()- metoden er det samme:

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

Oppførselen er imidlertid forskjellig fra get() -metoden .

For det første returnerer denne metoden ikke et ekte objekt, men en proxy: en virtuell stubb.

For det andre, når du bruker load()- metoden , er det ingen sjekk om det er en slik oppføring i databasen. I stedet oppretter Hibernate umiddelbart et proxy-objekt med den beståtte IDen og returnerer den.

For det tredje vil alt arbeid med databasen skje når metodene til proxy-objektet kalles. Hvis du prøver å kalle opp for eksempel getName() -metoden , vil det første kallet til databasen skje. Eksempel:

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

load()- metoden skal ikke brukes til å sjekke for tilstedeværelsen av objekter i databasen - den vil rett og slett ikke vise dette. I tillegg, hvis du sender en ugyldig ID, for eksempel null, til den, vil den ganske enkelt returnere null.

find() metode

Find()- metoden ble sendt videre til Session- grensesnittet fra JPA-standarden. Og som du vet, beskriver denne standarden ikke bare signaturen til metoder, men regulerer også oppførselen.

Denne metoden fungerer akkurat som get()- metoden . Hvis objektet ikke ble funnet av den godkjente nøkkelen, vil metoden ganske enkelt returnere null.

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

refresh()-metoden

En annen nyttig metode som har å gjøre med å laste et objekt fra en database er refresh()- metoden .

Husker du persist() -metoden som oppdaterte dataene i databasen basert på det beståtte objektet? Så refresh() -metoden fungerer akkurat det motsatte: den oppdaterer et eksisterende objekt basert på data fra databasen.

Denne oppførselen er nødvendig hvis, for eksempel, når du skriver et objekt til databasen, det kalles forskjellige lagrede prosedyrer der som korrigerer de skrevne dataene.

I slike tilfeller kan det være nyttig å lese objektet på nytt fra databasen hvis det er en sjanse for at det har endret seg. Eksempel:

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