When does Hibernate Session.load() throw an exception

exception, hibernate, load, session

Solution

In short:

- `x` will not be null after the load, so neither will `y`

- There may or may not be an exception from `load()` if the object doesn't exist

- If there is no exception from `load()`, and the object doesn't exist, there will be an exception when accessing `x` or `y`.

To elaborate:

Are you trying to determine if the key is present? Or are you assuming it is, but just want to handle anomalies?

See the documentation, specifically:

You should not use this method to determine if an instance exists (use `get()` instead). Use this only to retrieve an instance that you assume exists, where non-existence would be an actual error.

From the book 'hibernate in action' on using load():

The application may retrieve a valid reference (a proxy) to a persistent instance without hitting the database to retrieve its persistent state. So `load()` might not throw an exception when it doesn’t find the persistent object in the cache or database; the exception would be thrown later, when the proxy is accessed.

So:

If you are looking to know whether the item exists, use `get()`, not `load()`.

Problem

``` try { x = session.load(...); y = x; } catch(Exception e) { //do something } ``` If the key is not present, will load(...) throw an exception - right away - will return a proxy and then throw an exception when the object is trying to be obtained from the db later? Also, in the code above, if the execution reaches the assignment y = x, is it guaranteed that at that point, x is not null? Are there situations where x can be null at that point?

Original source