 <p>actually JPA2 is specification and Hibernate is implementation of this specification. </p> <p>None of them provides cache implementation, except session cache (your entities within single transaction/session interaction) </p> <p>If you plan to add possibility to replace hibernate, then use pure JPA2 annotations and configurations. </p> <p>Hibernate's annotation @Cache provides a bit more fine grained control on how entities are stored in cache, JPA's @Cacheable provides only possibility either to include in cache or not (all the control of storage in cache is defined in the general JPA configuration and caching implementation). </p>