1. It's very difficult to define what is "best". It is the most widespread one, and that was a very compelling reason for dedicating the second part to Hibernate.
2. Front-side caching is definitely very important, but there are still a lot of things you can do to optimize response time: batching, statement caching, watching executed queries to make sure they are efficient, indexing properly, fetching less data than necessary.
3. The first-level cache is a
transactional write-behind cache that gives you
application-level repeatable reads. It's bound to a Session so it's not thread-safe. Its purpose is to delay the connection acquisition and to allow you to batch statements automatically. The 2nd level cache is thread-safe and you can even use a cluster cache with off-heap storage (Terracotta, Hazelcast). The
2nd level cache can help you to reduce the load on the database, and it is strongly consistent (a data integrity guarantee that is much harder to enforce on other caching solutions).