# Caching an entity caches a detached object, lazy proxies and all loadEntity(1) -> Alice (com.ankurm.caching.jpa.Customer) database loads: 1 second call returns the same instance? true database loads: 1 --- touching the lazy collection outside the session --- org.hibernate.LazyInitializationException Cannot lazily initialize collection of role 'com.ankurm.caching.jpa.Customer.orders' with key '1' (no session) This is the line between the two caches. Hibernate's second-level cache stores dehydrated entity state and rebuilds a managed entity inside a session, so lazy associations still work. The Spring cache abstraction stores the object your method returned, exactly as it was when the transaction ended - detached, with whatever its proxies were holding.