Alex, putForExternalRead is used when putting stuff in the cache as a result of loading data from the database. If entities are updated in the cache, a normal put is executed. You can find tons of invaluable information on JBoss Cache based 2nd level cache for Hibernate in http://docs.jboss.org/jbossclustering/hibernate-caching/3.3/en-US/html_single/index.html and http://docs.jboss.org/jbossclustering/hibernate-caching/3.5/en-US/html_single/index.html