In Hibernate, both the get()
and load()
methods are used to retrieve an entity from the database based on its identifier (primary key). However, they differ in their behavior and the time of database access:
-
get():
- The
get()
method is a part of theSession
interface. - It immediately hits the database and retrieves the entity with the specified identifier.
- If the entity with the given identifier does not exist in the database,
get()
returnsnull
. - It returns a fully initialized and populated object (if found) or
null
. - The
get()
method is suitable for cases where the application expects the entity to exist and wants to immediately load it into memory. - Example:
// Retrieve Employee with id 101 from the database Employee employee = session.get(Employee.class, 101);
- The
-
load():
- The
load()
method is also a part of theSession
interface. - It returns a proxy object without hitting the database immediately. Instead, it creates a placeholder proxy object with the given identifier.
- The actual database query is deferred until the proxy object is accessed for the first time (e.g., by accessing its properties or calling a method).
- If the entity with the given identifier does not exist in the database,
load()
throws anObjectNotFoundException
when the proxy object is accessed. - It returns a proxy object (if found) or throws an exception if the entity is not found.
- The
load()
method is suitable for cases where lazy loading is desirable, and the application does not need the entity immediately. - Example:
// Retrieve Employee with id 101 as a proxy object Employee employee = session.load(Employee.class, 101); // Accessing properties or methods of the proxy object triggers database access String employeeName = employee.getName();
- The
In summary, the get()
method immediately loads the entity from the database, whereas the load()
method returns a proxy object and defers database access until the proxy object is accessed for the first time. The choice between them depends on the specific requirements of the application and whether immediate database access is necessary.