Hibernate 4 and Ehcache higher than 2.4.3
Join the DZone community and get the full member experience.Join For Free
For those using Hibernate 4, if you want to use Ehcache, you must add a specific dependency: hibernate-ehcache
But there’s a catch, it embeds Ehcache 2.4.3, which is unconvenient as the latest version of Ehcache is 2.7.0
So if you are looking to use Hibernate 4, you should exclude the embeded Ehcache dependency.
In your pom.xml, it will look like this:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.1.9.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>4.1.9.Final</version> <exclusions> <exclusion> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> </exclusion> </exclusions> </dependency>
Then according to the version of ehcache, you will need either ehcache or ehcache-core
Up to 2.6.x:
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.5.7</version> </dependency>
Starting at 2.7.0:
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.7.0</version> </dependency>
Changes in your code:
Please note that Ehcache contains classes to support Hibernate 3, but hibernate-ehcache contains classes for Hibernate 4
Meaning that in your classpath, you’ll end up with two packages:
For Hibernate 3, classes are in the package :
But for Hibernate 4, classes are in the package :
So your hibernate configuration will need these properties to be set up:
<property name="hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.EhCacheRegionFactory </property>
Please note that it is:
org.hibernate.cache.ehcache.EhCacheRegionFactory while for Hibernate 3, it was
So be really careful in your code, you could have
which will compile but then fail at run time since this is for Hibernate 4. Whatever hibernate class you’re using, you should have:
The exception is for the property net.sf.ehcache.configurationResourceName that will contain the path to your ehcache xml config file, just like in Hibernate 3
Similarly, just like for Hibernate 3, you will need:
<property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.use_query_cache">false</property>
Eventually it would make sense that the Hibernate folks have a dependency on ehcache instead of embedding it in their hibernate-ehcache dependency, that would make things easier.
Published at DZone with permission of Aurelien Broszniowski, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.