Any query on that should hit the cache and not the database
This is an unrealistic aim, unless you know all the queries that your application will issue. Queries are not really good candidates for caching because they are subject to a lot of different variables (i.e. are very changeable).
Hibernate has a query cache (check the docs) that you could enable. This will cache the identifiers of results from queries defined as cacheable along with the queries themselves, so used in conjunction with the second level cache this should offer something approaching what you want.
How much read only data do you have? If its a small amount I would just cache it in memory manually and control access to it through your DAO layer.