[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
http://vladmihalcea.com/2015/04/27/how-does-hibernate-read_only-cacheconcurrencystrategy-work/comment-page-1/#comment-3404
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.
Vlad
More information about the hibernate-dev
mailing list