/*
 * 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.tuple.entity;

import org.hibernate.PropertyNotFoundException;
import org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor;
import org.hibernate.bytecode.spi.ReflectionOptimizer;
import org.hibernate.engine.spi.PersistentAttributeInterceptable;
import org.hibernate.engine.spi.PersistentAttributeInterceptor;
import org.hibernate.internal.util.ReflectHelper;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.tuple.PojoInstantiator;

Author:Steve Ebersole
/** * @author Steve Ebersole */
public class PojoEntityInstantiator extends PojoInstantiator { private final EntityMetamodel entityMetamodel; private final Class proxyInterface; private final boolean applyBytecodeInterception; public PojoEntityInstantiator( EntityMetamodel entityMetamodel, PersistentClass persistentClass, ReflectionOptimizer.InstantiationOptimizer optimizer) { super( persistentClass.getMappedClass(), optimizer, persistentClass.hasEmbeddedIdentifier() ); this.entityMetamodel = entityMetamodel; this.proxyInterface = persistentClass.getProxyInterface(); this.applyBytecodeInterception = PersistentAttributeInterceptable.class.isAssignableFrom( persistentClass.getMappedClass() ); } @Override protected Object applyInterception(Object entity) { if ( !applyBytecodeInterception ) { return entity; } PersistentAttributeInterceptor interceptor = new LazyAttributeLoadingInterceptor( entityMetamodel.getName(), entityMetamodel.getBytecodeEnhancementMetadata() .getLazyAttributesMetadata() .getLazyAttributeNames(), null ); ( (PersistentAttributeInterceptable) entity ).$$_hibernate_setInterceptor( interceptor ); return entity; } @Override public boolean isInstance(Object object) { return super.isInstance( object ) || //this one needed only for guessEntityMode() ( proxyInterface!=null && proxyInterface.isInstance(object) ); } }