[hibernate-dev] Immutable entities read-only caching improvement proposal

Mihalcea Vlad mih_vlad at yahoo.com
Tue May 5 03:54:03 EDT 2015

Hi guys,
Taking this comment as a starting point
To reduce cache entities hydration, we could simply use the: "hibernate.cache.use_reference_entries" setting, but that's too restrictive
as the AbstractEntityPersister prevents it when there are one-to-many associations on an immutable entity:
    public boolean canUseReferenceCacheEntries() {
        // todo : should really validate that the cache access type is read-only

        if ( ! factory.getSettings().isDirectReferenceCacheEntriesEnabled() ) {
            return false;

        // for now, limit this to just entities that:
        //         1) are immutable
        if ( entityMetamodel.isMutable() ) {
            return false;

        //        2)  have no associations.  Eventually we want to be a little more lenient with associations.
        for ( Type type : getSubclassPropertyTypeClosure() ) {
            if ( type.isAssociationType() ) {
                return false;

        return true;
If the entity is immutable and all to-many associations are all marked with "@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)" 
we could allow the entity graph to be saved as an object reference.
This way we can save a lot of unnecessary CPU processing, spent with hydrating each second-level cache entry.


More information about the hibernate-dev mailing list