'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();