/** * Performs the process of loading an entity from the configured * underlying datasource. * * @param event The load event * @param persister The persister for the entity being requested for load * * @return The object loaded from the datasource, or null if not found. */ protected Object loadFromDatasource( final LoadEvent event, final EntityPersister persister) { Object entity = persister.load( event.getEntityId(), event.getInstanceToLoad(), event.getLockOptions(), event.getSession() ); if ( event.isAssociationFetch() && event.getSession().getFactory().getStatistics().isStatisticsEnabled() ) { event.getSession().getFactory().getStatistics().fetchEntity( event.getEntityClassName() ); } return entity; }
private void doOnLoad( final EntityPersister persister, final LoadEvent event, final LoadEventListener.LoadType loadType) { try { final EntityKey keyToLoad = event.getSession().generateEntityKey( event.getEntityId(), persister ); if ( loadType.isNakedEntityReturned() ) { //do not return a proxy! //(this option indicates we are initializing a proxy) event.setResult( load( event, persister, keyToLoad, loadType ) ); } else { //return a proxy if appropriate if ( event.getLockMode() == LockMode.NONE ) { event.setResult( proxyOrLoad( event, persister, keyToLoad, loadType ) ); } else { event.setResult( lockAndLoad( event, persister, keyToLoad, loadType, event.getSession() ) ); } } } catch (HibernateException e) { LOG.unableToLoadCommand( e ); throw e; } }
/** * Helper to avoid creating many new instances of LoadEvent: it's an allocation hot spot. */ private LoadEvent recycleEventInstance(final LoadEvent event, final Serializable id, final String entityName) { if ( event == null ) { return new LoadEvent( id, entityName, true, this ); } else { event.setEntityClassName( entityName ); event.setEntityId( id ); event.setInstanceToLoad( null ); event.setLockMode( LoadEvent.DEFAULT_LOCK_MODE ); event.setLockScope( LoadEvent.DEFAULT_LOCK_OPTIONS.getScope() ); event.setLockTimeout( LoadEvent.DEFAULT_LOCK_OPTIONS.getTimeOut() ); return event; } }
protected EntityPersister getPersister( final LoadEvent event ) { if ( event.getInstanceToLoad() != null ) { //the load() which takes an entity does not pass an entityName event.setEntityClassName( event.getInstanceToLoad().getClass().getName() ); return event.getSession().getEntityPersister( null, event.getInstanceToLoad() ); } else { return event.getSession().getFactory().getEntityPersister( event.getEntityClassName() ); } }
public class MyLoadListener implements LoadEventListener{ public void setSpringManagedProperty(String springManagedProperty){ this.springManagedProperty = springManagedProperty; } private String springManagedProperty; @Override public void onLoad(LoadEvent event, LoadType loadType) throws HibernateException{ if(MyEntity.class.getName().equals(event.getEntityClassName())){ MyEntity entity = (MyEntity) event.getInstanceToLoad(); entity.setMyCustomProperty(springManagedProperty); } } }
final SessionImplementor source = event.getSession(); if ( event.getInstanceToLoad() != null ) { persister = source.getEntityPersister( null, event.getInstanceToLoad() ); //the load() which takes an entity does not pass an entityName event.setEntityClassName( event.getInstanceToLoad().getClass().getName() ); persister = source.getFactory().getEntityPersister( event.getEntityClassName() ); throw new HibernateException( "Unable to locate persister: " + event.getEntityClassName() ); if ( idClass != null && ! idClass.isInstance( event.getEntityId() ) ) { final EntityType dependentParentType = (EntityType) singleSubType; final Type dependentParentIdType = dependentParentType.getIdentifierOrUniqueKeyType( source.getFactory() ); if ( dependentParentIdType.getReturnedClass().isInstance( event.getEntityId() ) ) { "Provided id of the wrong type for class " + persister.getEntityName() + ". Expected: " + idClass + ", got " + event.getEntityId().getClass() ); final EntityKey keyToLoad = source.generateEntityKey( event.getEntityId(), persister ); event.setResult( load(event, persister, keyToLoad, loadType) ); if ( event.getLockMode() == LockMode.NONE ) { event.setResult( proxyOrLoad(event, persister, keyToLoad, loadType) );
final LoadEventListener.LoadType options) { if ( event.getInstanceToLoad() != null ) { if ( event.getSession().getPersistenceContext().getEntry( event.getInstanceToLoad() ) != null ) { throw new PersistentObjectException( "attempted to load into an instance that was already associated with the session: " + MessageHelper.infoString( persister, event.getEntityId(), event.getSession().getFactory() persister.setIdentifier( event.getInstanceToLoad(), event.getEntityId(), event.getSession() ); boolean isOptionalInstance = event.getInstanceToLoad() != null; event.getSession() .getFactory() .getEntityNotFoundDelegate() .handleEntityNotFound( event.getEntityClassName(), event.getEntityId() ); else if ( isOptionalInstance && entity != event.getInstanceToLoad() ) { throw new NonUniqueObjectException( event.getEntityId(), event.getEntityClassName() );
LOG.tracev( "Attempting to resolve: {0}", MessageHelper.infoString( persister, event.getEntityId(), event.getSession().getFactory() ) ); LOG.tracev( "Resolved object in second-level cache: {0}", MessageHelper.infoString( persister, event.getEntityId(), event.getSession().getFactory() ) ); LOG.tracev( "Object not resolved in any cache: {0}", MessageHelper.infoString( persister, event.getEntityId(), event.getSession().getFactory() ) ); event.getSession().getPersistenceContext().getNaturalIdHelper().cacheNaturalIdCrossReferenceFromLoad( persister, event.getEntityId(), event.getSession().getPersistenceContext().getNaturalIdHelper().extractNaturalIdValues( entity, persister
/** * Load the data for the object with the specified id into a newly created object. * This is only called when lazily initializing a proxy. * Do NOT return a proxy. */ @Override public Object immediateLoad(String entityName, Serializable id) throws HibernateException { if ( log.isDebugEnabled() ) { EntityPersister persister = getFactory().getMetamodel().entityPersister( entityName ); log.debugf( "Initializing proxy: %s", MessageHelper.infoString( persister, id, getFactory() ) ); } LoadEvent event = loadEvent; loadEvent = null; event = recycleEventInstance( event, id, entityName ); fireLoad( event, LoadEventListener.IMMEDIATE_LOAD ); Object result = event.getResult(); if ( loadEvent == null ) { event.setEntityClassName( null ); event.setEntityId( null ); event.setInstanceToLoad( null ); event.setResult( null ); loadEvent = event; } return result; }
protected Object loadFromDatasource( final LoadEvent event, final EntityPersister persister, final EntityKey keyToLoad, final LoadEventListener.LoadType options) { final SessionImplementor source = event.getSession(); Object entity = persister.load( event.getEntityId(), event.getInstanceToLoad(), event.getLockMode(), source ); if ( event.isAssociationFetch() && source.getFactory().getStatistics().isStatisticsEnabled() ) { source.getFactory().getStatisticsImplementor().fetchEntity( event.getEntityClassName() ); } return entity; }
private void loadByDerivedIdentitySimplePkValue( LoadEvent event, LoadEventListener.LoadType options, EntityPersister dependentPersister, EmbeddedComponentType dependentIdType, EntityPersister parentPersister) { final EntityKey parentEntityKey = event.getSession().generateEntityKey( event.getEntityId(), parentPersister ); final Object parent = doLoad( event, parentPersister, parentEntityKey, options ); final Serializable dependent = (Serializable) dependentIdType.instantiate( parent, event.getSession() ); dependentIdType.setPropertyValues( dependent, new Object[] {parent}, dependentPersister.getEntityMode() ); final EntityKey dependentEntityKey = event.getSession().generateEntityKey( dependent, dependentPersister ); event.setEntityId( dependent ); event.setResult( doLoad( event, dependentPersister, dependentEntityKey, options ) ); }
@Override public void onLoad(LoadEvent event, LoadType loadType) throws HibernateException { if ( IMMEDIATE_LOAD == loadType ) { String msg = loadType + ":" + event.getEntityClassName() + "#" + event.getEntityId(); throw new RuntimeException( msg ); } } }
@SuppressWarnings("unchecked") protected final T doLoad(Serializable id) { if ( this.lockOptions != null ) { LoadEvent event = new LoadEvent( id, entityPersister.getEntityName(), lockOptions, SessionImpl.this ); fireLoad( event, LoadEventListener.GET ); return (T) event.getResult(); } LoadEvent event = new LoadEvent( id, entityPersister.getEntityName(), false, SessionImpl.this ); boolean success = false; try { fireLoad( event, LoadEventListener.GET ); success = true; } catch (ObjectNotFoundException e) { // if session cache contains proxy for non-existing object } finally { afterOperation( success ); } return (T) event.getResult(); } }
if ( event.getInstanceToLoad() != null ) { throw new HibernateException( "Attempt to load entity [%s] from cache using provided object instance, but cache " + "is storing references: " + event.getEntityId() ); event.getSession(), entityKey ); Object entity = convertCacheEntryToEntity( entry, event.getEntityId(), persister, event, entityKey ); event.getEntityId(), persister.getEntityName() );
final LoadEventListener.LoadType options) { final SessionImplementor source = event.getSession(); && event.getLockMode().lessThan(LockMode.READ); event.getEntityId(), persister.getIdentifierType(), persister.getRootEntityName() event.getEntityId(), persister, event
final LoadEventListener.LoadType options) throws HibernateException { SessionImplementor session = event.getSession(); Object old = session.getEntityUsingInterceptor( keyToLoad ); final EntityPersister persister = event.getSession() .getFactory() .getEntityPersister( keyToLoad.getEntityName() ); upgradeLock( old, oldEntry, event.getLockOptions(), event.getSession() );
/** * Attempts to load the entity from the second-level cache. * * @param event The load event * @param persister The persister for the entity being requested for load * * @return The entity from the second-level cache, or null. */ public Object loadFromSecondLevelCache( final LoadEvent event, final EntityPersister persister, final EntityKey entityKey) { final SessionImplementor source = event.getSession(); final boolean useCache = persister.canReadFromCache() && source.getCacheMode().isGetEnabled() && event.getLockMode().lessThan( LockMode.READ ); if ( !useCache ) { // we can't use cache here return null; } final Object ce = getFromSharedCache( event, persister, source ); if ( ce == null ) { // nothing was found in cache return null; } return processCachedEntry( event, persister, ce, source, entityKey ); }
final LoadEvent event) throws HibernateException { final Object optionalObject = event.getInstanceToLoad(); final EventSource session = event.getSession(); final SessionFactoryImplementor factory = session.getFactory();
private Object getFromSharedCache( final LoadEvent event, final EntityPersister persister, SessionImplementor source) { final EntityDataAccess cache = persister.getCacheAccessStrategy(); final Object ck = cache.generateCacheKey( event.getEntityId(), persister, source.getFactory(), source.getTenantIdentifier() ); final Object ce = CacheHelper.fromSharedCache( source, ck, persister.getCacheAccessStrategy() ); if ( source.getFactory().getStatistics().isStatisticsEnabled() ) { if ( ce == null ) { source.getFactory().getStatistics().entityCacheMiss( StatsHelper.INSTANCE.getRootEntityRole( persister ), cache.getRegion().getName() ); } else { source.getFactory().getStatistics().entityCacheHit( StatsHelper.INSTANCE.getRootEntityRole( persister ), cache.getRegion().getName() ); } } return ce; }
EntityKey entityKey) { final EventSource session = event.getSession(); final SessionFactoryImplementor factory = session.getFactory(); final EntityPersister subclassPersister; final Object optionalObject = event.getInstanceToLoad(); entity = optionalObject == null ? session.instantiate( subclassPersister, entityId ) PostLoadEvent postLoadEvent = event.getPostLoadEvent() .setEntity( entity ) .setId( entityId )