Transaction is required by Hiberante since the underlyer which is the JDBC context which establish the connection to the database (JDBC driver) work in a transactional way when you hook up with the tables; so Hibernate session is a representation of an open JDBC connection in some part of it.
You can save the query result based on a selected columns which returns a List<Object[]> into a holder class or a EhCacher which has no transactional caching aspect or you can you the JBossCache
at
www.jboss.org/products/jbosscache
The cacher allows you to cache the result into a file system if you want to persist them or into the memory.
Regards,
Alan Mehio
London, UK