@Override
public Object[] getPropertyValues(final Object entity) {
final BytecodeEnhancementMetadata enhancementMetadata = entityMetamodel.getBytecodeEnhancementMetadata();
final boolean isEnhancedForLazyLoading = enhancementMetadata.isEnhancedForLazyLoading();
final LazyAttributeLoadingInterceptor lazyInterceptor = isEnhancedForLazyLoading ? enhancementMetadata.extractInterceptor(entity) : null;
final NonIdentifierAttribute[] properties = entityMetamodel.getProperties();
final int span = entityMetamodel.getPropertySpan();
final Object[] result = new Object[span];
for ( int j = 0; j < span; j++ ) {
final NonIdentifierAttribute property = properties[j];
if ( !isEnhancedForLazyLoading || !property.isLazy() || ( lazyInterceptor != null && lazyInterceptor.isInitializedLazyField(property.getName()) ) ) {
result[j] = getters[j].get( entity );
} else {
result[j] = LazyPropertyInitializer.UNFETCHED_PROPERTY;
}
}
return result;
}