-
Language:
English
-
Language:
English
Red Hat Training
A Red Hat training course is available for Red Hat JBoss Web Server
10.4. Loading an Object
The
load()
methods of Session
provide a way of retrieving a persistent instance if you know its identifier. load()
takes a class object and loads the state into a newly instantiated instance of that class in a persistent state.
Cat fritz = (Cat) sess.load(Cat.class, generatedId);
// you need to wrap primitive identifiers long id = 1234; DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );
Alternatively, you can load state into a given instance:
Cat cat = new DomesticCat(); // load pk's state into cat sess.load( cat, new Long(pkId) ); Set kittens = cat.getKittens();
Be aware that
load()
will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, load()
just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This is useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if batch-size
is defined for the class mapping.
If you are not certain that a matching row exists, you should use the
get()
method which hits the database immediately and returns null if there is no matching row.
Cat cat = (Cat) sess.get(Cat.class, id); if (cat==null) { cat = new Cat(); } return cat;
You can even load an object using an SQL
SELECT ... FOR UPDATE
, using a LockMode
.
Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);
Any associated instances or contained collections will not be selected
FOR UPDATE
, unless you decide to specify lock
or all
as a cascade style for the association.
It is possible to re-load an object and all its collections at any time, using the
refresh()
method. This is useful when database triggers are used to initialize some of the properties of the object.
sess.save(cat); sess.flush(); //force the SQL INSERT sess.refresh(cat); //re-read the state (after the trigger executes)
How much Hibernate loads from the database and how many SQL
SELECT
s it will use will depend on the fetching strategy. See Section 19.1.1, “About Fetching Strategies”