/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.cache.cfg.internal;
import java.util.Iterator;
import org.hibernate.cache.cfg.spi.NaturalIdDataCachingConfig;
import org.hibernate.cache.spi.access.AccessType;
import org.hibernate.mapping.Property;
import org.hibernate.mapping.RootClass;
import org.hibernate.metamodel.model.domain.NavigableRole;
Author: Steve Ebersole
/**
* @author Steve Ebersole
*/
public class NaturalIdDataCachingConfigImpl
extends AbstractDomainDataCachingConfig
implements NaturalIdDataCachingConfig {
private final RootClass rootEntityDescriptor;
private final NavigableRole navigableRole;
private final boolean mutable;
public NaturalIdDataCachingConfigImpl(
RootClass rootEntityDescriptor,
AccessType accessType) {
super( accessType );
this.rootEntityDescriptor = rootEntityDescriptor;
this.navigableRole = new NavigableRole( rootEntityDescriptor.getEntityName() );
// sucks that we need to do this here. persister does the same "calculation"
this.mutable = hasAnyMutableNaturalIdProps();
}
private boolean hasAnyMutableNaturalIdProps() {
final Iterator itr = rootEntityDescriptor.getDeclaredPropertyIterator();
while ( itr.hasNext() ) {
final Property prop = (Property) itr.next();
if ( prop.isNaturalIdentifier() && prop.isUpdateable() ) {
return true;
}
}
return false;
}
@Override
public NavigableRole getNavigableRole() {
return navigableRole;
}
@Override
public boolean isMutable() {
return mutable;
}
@Override
public boolean isVersioned() {
return false;
}
}