While upgrading my Hibernate testing repository to 5.3, I realized that we no longer auto-register the 2nd-level cache for entities and the collections even if those are annotated with the Hibernate @Cache annotation. I noticed that the Hibernate tests have been modified and we require to register those manually:
for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
config.put( AvailableSettings.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(), entry.getValue() );
}
for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
config.put( AvailableSettings.COLLECTION_CACHE_PREFIX + "." + entry.getKey(), entry.getValue() );
}
Now, if I don't do that, I get the following exception:
Caused by: org.hibernate.cache.CacheException: On-the-fly creation of JCache Cache objects is not supported [com.vladmihalcea.book.hpjp.hibernate.cache.query.QueryCacheTest$Post.comments]
at org.hibernate.cache.ehcache.internal.EhcacheRegionFactory.createCache(EhcacheRegionFactory.java:106)
at org.hibernate.cache.ehcache.internal.EhcacheRegionFactory.getOrCreateCache(EhcacheRegionFactory.java:100)
at org.hibernate.cache.ehcache.internal.EhcacheRegionFactory.createDomainDataStorageAccess(EhcacheRegionFactory.java:71)
at org.hibernate.cache.spi.support.RegionFactoryTemplate.buildDomainDataRegion(RegionFactoryTemplate.java:31)
at org.hibernate.cache.internal.EnabledCaching.prime(EnabledCaching.java:108)
at org.hibernate.metamodel.internal.MetamodelImpl.primeSecondLevelCacheRegions(MetamodelImpl.java:284)
at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:116)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939)
However, I don't even use JCache. I use "ehcache" instead.
I'm worried about all those applications trying to upgrade to 5.3. Imagine if they have hundreds of entities and collections. People will surely start complaining if we force them to do that manually during bootstrap. More, I'm not sure how they can do when they just bootstrap via a JPA persistence.xml configuration file. |