A Hibernate Session is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (SessionFactory-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data).
You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements org.hibernate.cache.CacheProvider using the property hibernate.cache.provider_class. Hibernate comes bundled with a number of built-in integrations with open-source cache providers (listed below); additionally, you could implement your own and plug it in as outlined above. Note that versions prior to 3.2 defaulted to use EhCache as the default cache provider; that is no longer the case as of 3.2.
| Cache | Provider class | Type | Cluster Safe | Query Cache Supported |
|---|---|---|---|---|
| Hashtable (not intended for production use) |
org.hibernate.cache.HashtableCacheProvider
|
memory | yes | |
| EHCache |
org.hibernate.cache.EhCacheProvider
|
memory, disk | yes | |
| OSCache |
org.hibernate.cache.OSCacheProvider
|
memory, disk | yes | |
| SwarmCache |
org.hibernate.cache.SwarmCacheProvider
|
clustered (ip multicast) | yes (clustered invalidation) | |
| JBoss TreeCache |
org.hibernate.cache.TreeCacheProvider
|
clustered (ip multicast), transactional | yes (replication) | yes (clock sync req.) |
Table 19.1. Cache Providers