Hibernate first level cache is Session level cache, so if the object is currently in the Hibernate session results will be fetched from it.
Second level cache is a SessionFactory level cache, so the result fill be cached for any user.
AS far as i understand you need cache for a specific query. Hibernate has also this feature. org.hibernate.Query.setCacheable(true) can be used here.
From the documentation
Enable results caching for specific queries
Since most queries do not
benefit from caching of their results, you need to enable caching for
individual queries, e ven after enabling query caching overall. To
enable results caching for a particular query, call
org.hibernate.Query.setCacheable(true). This call allows the query to
look for existing cache results or add its results to the cache when
it is executed.
See also
Hibernate Caching