when to use detached criteria? and what is the advantage we get by using detached criterias instead of normal criteria?
Criteria criteria = sessionFactory.ge
As per docs
Some applications need to create criteria queries in "detached mode", where the Hibernate session is not available. This class may be instantiated anywhere, and then a Criteria may be obtained by passing a session to
getExecutableCriteria(). All methods have the same semantics and behavior as the corresponding methods of the Criteria interface.
'Detached from session object'
Detached Criteria may be used in two scenarios:
Building criteria query with no session object:
Session only requires during executing the query/submitting the query to database, not while building the query.
Ex:
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);
detachedCriteria.add(Restrictions.eq("DEPTID", 1));
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("DEPTID"));
detachedCriteria.setProjection(projectionList);
//Add more
.............................
In the above code do you find any necessity of having session object for building such a criteria query? absolutely NO.
Building same criteria query for multiple times:
Build it once irrespective of the session object, and can be used whenever/wherever you want.
Finally when session object is available, use the above query with session as follows:
detachedCriteria.getExecutableCriteria(session).list();