I have just discovered that the ignite hibernate layer 2 cache region factory does something weird with tracking changes - the wrong regions/caches were being updated - I would end up with cache entries for other regions in one region.
for example if I say loaded updated a product entity then updated a customer entity the product cache could contain the update to the customer. It looks like someone didn't finish the implementation as there was a note in source : /** Map needed to provide the same transaction context for different regions. */ So I made the following two lines of change in modules/hibernate/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegionFactory Line 102 in 1.8 : - private final ThreadLocal threadLoc = new ThreadLocal(); + private ConcurrentMap<String, ThreadLocal> threadLocMap = new ConcurrentHashMap<>(); Line 222 in 1.8 : ThreadLocal threadLocalForCache(String cacheName) { - return threadLoc; + return threadLocMap.computeIfAbsent(cacheName, (k)->new ThreadLocal());; } Cameron