1. Reason
The ObjectNotFoundException exception is thrown when we try to load an entity in hibernate with session.load() method and entity is not found.
The exception trace looks like this:
Hibernate: select department0_.ID as ID0_0_, department0_.NAME as NAME0_0_ from DEPARTMENT department0_ where department0_.ID=?
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [hibernate.test.dto.DepartmentEntity#11]
at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:375)
at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:79)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:68)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:140)
at hibernate.test.dto.DepartmentEntity$$EnhancerByCGLIB$$deac2c14.getName()
at hibernate.test.TestHibernateEhcache.main(TestHibernateEhcache.java:21)

2. Solution
The correct way to solve this problem is to use session.get() method. The get() method will return null if the entity with the given identifier is not found.
DepartmentEntity department = (DepartmentEntity) session.get(DepartmentEntity.class, new Integer(11));
if(department == null) {
//handle null case
}
Another solution is to wrap the session.load() call in try-catch block and handle exception accordingly.
Happy Learning !!
Comments