get() metode

Hvis du ønsker at få et objekt ved hjælp af dets ID (eller Primary Key), så har Hibernate tre metoder til dette:

  • belastning()
  • få()
  • Find()

De gør det samme, men der er nuancer. Det generelle format for get() metoden er:

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

Get()- metoden tager som sin anden parameter ID'et (Primærnøgle) for det objekt, den skal returnere. Det indlæser derefter objektet fra databasen og returnerer det. Eksempel:

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

Hvis en post med dette ID ikke findes i databasen, vil metoden returnere null.

load() metode

Den anden metode til at indlæse et objekt er load() metoden . Det generelle format for load() -metoden er det samme:

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

Dens adfærd er dog forskellig fra get()- metoden .

For det første returnerer denne metode ikke et rigtigt objekt, men en proxy: en virtuel stub.

For det andet, når du bruger load()- metoden , er der ingen kontrol af, om der er en sådan post i databasen. I stedet opretter Hibernate straks et proxyobjekt med det beståede id og returnerer det.

For det tredje vil alt arbejde med databasen forekomme, når metoderne for proxyobjektet kaldes. Hvis du forsøger at kalde for eksempel getName() metoden , så vil det første kald til databasen forekomme. 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 bør ikke bruges til at kontrollere tilstedeværelsen af ​​objekter i databasen - den vil simpelthen ikke vise dette. Derudover, hvis du sender et ugyldigt ID, såsom null, til det, vil det blot returnere null.

find() metode

Find()- metoden blev videregivet til Session- grænsefladen fra JPA-standarden. Og som du ved, beskriver denne standard ikke kun signaturen af ​​metoder, men regulerer også adfærden.

Denne metode fungerer præcis som get() metoden . Hvis objektet ikke blev fundet af den beståede nøgle, vil metoden blot returnere null.

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

refresh() metode

En anden nyttig metode, der har at gøre med indlæsning af et objekt fra en database, er refresh() metoden .

Husker du persist() -metoden , der opdaterede dataene i databasen baseret på det beståede objekt? Så refresh() -metoden virker præcis det modsatte: den opdaterer et eksisterende objekt baseret på data fra databasen.

Denne adfærd er nødvendig, hvis for eksempel, når du skriver et objekt til databasen, der kaldes forskellige lagrede procedurer der, som retter de skrevne data.

I sådanne tilfælde kan det være nyttigt at genlæse objektet fra databasen, hvis der er en chance for, at det har ændret sig. 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