get() metoden

Om du vill få ett objekt med dess ID (eller primärnyckel), så har Hibernate tre metoder för detta:

  • ladda()
  • skaffa sig()
  • hitta()

De gör samma sak, men det finns nyanser. Det allmänna formatet för metoden get() är:

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

Metoden get() tar som sin andra parameter ID (Primärnyckel) för objektet som den behöver returnera. Den laddar sedan objektet från databasen och returnerar det. Exempel:

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

Om en post med detta ID inte hittas i databasen kommer metoden att returnera null.

load() metod

Den andra metoden för att ladda ett objekt är metoden load() . Det allmänna formatet för metoden load() är detsamma:

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

Dess beteende skiljer sig dock från metoden get() .

För det första returnerar denna metod inte ett riktigt objekt, utan en proxy: en virtuell stubb.

För det andra, när du använder metoden load() , finns det ingen kontroll om det finns en sådan post i databasen. Istället skapar Hibernate omedelbart ett proxyobjekt med det angivna ID:t och returnerar det.

För det tredje kommer allt arbete med databasen att ske när metoderna för proxyobjektet anropas. Om du försöker anropa till exempel metoden getName() , kommer det första anropet till databasen att ske. Exempel:

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

Metoden load() ska inte användas för att kontrollera förekomsten av objekt i databasen - den kommer helt enkelt inte att visa detta. Dessutom, om du skickar ett ogiltigt ID, som null, till det, kommer det helt enkelt att returnera null.

find() metod

Metoden find() skickades vidare till sessionsgränssnittet från JPA-standarden . Och som ni vet beskriver denna standard inte bara signaturen av metoder, utan reglerar också beteendet.

Denna metod fungerar precis som metoden get() . Om objektet inte hittades av den godkända nyckeln, returnerar metoden helt enkelt null.

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

refresh() metod

En annan användbar metod som har att göra med att ladda ett objekt från en databas är metoden refresh() .

Kommer du ihåg metoden persist() som uppdaterade data i databasen baserat på det skickade objektet? Så, metoden refresh() fungerar precis tvärtom: den uppdaterar ett befintligt objekt baserat på data från databasen.

Detta beteende är nödvändigt om, till exempel, när man skriver ett objekt till databasen, olika lagrade procedurer anropas där som korrigerar skrivna data.

I sådana fall kan det vara användbart att läsa om objektet från databasen om det finns en chans att det har ändrats. Exempel:

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