CodeGym /Corsi /All lectures for IT purposes /Diversi modi per ottenere un oggetto

Diversi modi per ottenere un oggetto

All lectures for IT purposes
Livello 1, Lezione 219
Disponibile

metodo get()

Se vuoi ottenere un oggetto tramite il suo ID (o chiave primaria), Hibernate ha tre metodi per questo:

  • carico()
  • Ottenere()
  • Trovare()

Fanno la stessa cosa, ma ci sono sfumature. Il formato generale del metodo get() è:

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

Il metodo get() prende come secondo parametro l'ID (Primary Key) dell'oggetto che deve restituire. Quindi carica quell'oggetto dal database e lo restituisce. Esempio:

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

Se un record con questo ID non viene trovato nel database, il metodo restituirà null.

metodo load()

Il secondo metodo per caricare un oggetto è il metodo load() . Il formato generale del metodo load() è lo stesso:

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

Tuttavia, il suo comportamento è diverso dal metodo get() .

Innanzitutto, questo metodo non restituisce un oggetto reale, ma un proxy: uno stub virtuale.

In secondo luogo, quando si utilizza il metodo load() , non viene verificato se esiste una tale voce nel database. Invece, Hibernate crea immediatamente un oggetto proxy con l'ID passato e lo restituisce.

In terzo luogo, tutto il lavoro con il database avverrà quando si chiamano i metodi dell'oggetto proxy. Se provi a chiamare, ad esempio, il metodo getName() , si verificherà la prima chiamata al database. Esempio:

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

Il metodo load() non dovrebbe essere usato per verificare la presenza di oggetti nel database - semplicemente non lo mostrerà. Inoltre, se gli si passa un ID non valido, come null, restituirà semplicemente null.

metodo find()

Il metodo find() è stato passato all'interfaccia Session dallo standard JPA. E come sai, questo standard non descrive solo la firma dei metodi, ma ne regola anche il comportamento.

Questo metodo funziona esattamente come il metodo get() . Se l'oggetto non è stato trovato dalla chiave passata, il metodo restituirà semplicemente null.

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

metodo refresh()

Un altro metodo utile che ha a che fare con il caricamento di un oggetto da un database è il metodo refresh() .

Ricordi il metodo persist () che ha aggiornato i dati nel database in base all'oggetto passato? Quindi, il metodo refresh() funziona esattamente al contrario: aggiorna un oggetto esistente in base ai dati del database.

Questo comportamento è necessario se, ad esempio, durante la scrittura di un oggetto nel database, vengono richiamate diverse stored procedure che correggono i dati scritti.

In tali casi, può essere utile rileggere l'oggetto dal database se c'è la possibilità che sia cambiato. Esempio:

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
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION