JDBC cache is less useful to my experience. Very often people can choose improve cache on DB side directly if they just need to speed up query. Few of my customers' systems allocate Giga bytes RAM for DB buffer and super fast network plus some middle tier cache.
Middle tier cache is more versatile in general, I mean in general.