private void ScheduleBatchLoadIfNeeded(object id, ISessionImplementor session)
		{
			//cannot batch fetch by unique key (property-ref associations)
			if (uniqueKeyPropertyName == null && id != null)
			{
				IEntityPersister persister = session.Factory.GetEntityPersister(AssociatedClass);
				EntityKey entityKey = new EntityKey(id, persister);
				if (!session.ContainsEntity(entityKey))
				{
					session.BatchFetchQueue.AddBatchLoadableEntityKey(entityKey);
				}
			}
		}
		private ICollectionInitializer GetSubselectInitializer(object key, ISessionImplementor session)
		{
			if (!IsSubselectLoadable)
			{
				return null;
			}

			SubselectFetch subselect = session.BatchFetchQueue.GetSubselect(new EntityKey(key, OwnerEntityPersister));

			if (subselect == null)
			{
				return null;
			}
			else
			{
				// Take care of any entities that might have
				// been evicted!
				ArrayList keysToRemove = new ArrayList();
				foreach (EntityKey entityKey in subselect.Result)
				{
					if (!session.ContainsEntity(entityKey))
					{
						keysToRemove.Add(entityKey);
					}
				}
				subselect.Result.RemoveAll(keysToRemove);

				// Run a subquery loader
				return CreateSubselectInitializer(subselect, session);
			}
		}