public CriteriaJoinWalker(IOuterJoinLoadable persister, CriteriaQueryTranslator translator, ISessionFactoryImplementor factory, ICriteria criteria, string rootEntityName, IDictionary <string, IFilter> enabledFilters) : base(translator.RootSQLAlias, persister, factory, enabledFilters) { this.translator = translator; querySpaces = translator.GetQuerySpaces(); if (translator.HasProjection) { InitProjection( translator.GetSelect(), translator.GetWhereCondition(), translator.GetOrderBy(), translator.GetGroupBy(), translator.GetHavingCondition(), enabledFilters, LockMode.None, translator.GetEntityProjections()); resultTypes = translator.ProjectedTypes; userAliases = translator.ProjectedAliases; includeInResultRow = new bool[resultTypes.Length]; ArrayHelper.Fill(IncludeInResultRow, true); } else { InitAll(translator.GetWhereCondition(), translator.GetOrderBy(), LockMode.None); resultTypes = new IType[] { TypeFactory.ManyToOne(persister.EntityName) }; // root entity comes last userAliasList.Add(criteria.Alias); //root entity comes *last* resultTypeList.Add(translator.ResultType(criteria)); includeInResultRowList.Add(true); userAliases = userAliasList.ToArray(); resultTypes = resultTypeList.ToArray(); includeInResultRow = includeInResultRowList.ToArray(); } }