I found the reason myself, so here it is:
Before executing the actual query, I was modifying the session to use binary sorting:
Code:
SQLQuery sqlQuery = session.createSQLQuery("alter session set nls_sort=binary");
sqlQuery.executeUpdate();
Hibernate thinks this executeUpdate() statement as a bulk data modification, that goes past the cache. Thus, the cache is considered as possibly out of sync with the underlying actual data and is cleared. Thus, many puts during the session, but at the end, no elements at all in the cache.