Index: C:/dev_home/Hibernate/Hibernate3.2.6/src/org/hibernate/criterion/SubqueryExpression.java =================================================================== --- C:/dev_home/Hibernate/Hibernate3.2.6/src/org/hibernate/criterion/SubqueryExpression.java (revision 53) +++ C:/dev_home/Hibernate/Hibernate3.2.6/src/org/hibernate/criterion/SubqueryExpression.java (working copy) @@ -38,7 +38,11 @@ } protected abstract String toLeftSqlString(Criteria criteria, CriteriaQuery outerQuery); - + + public CriteriaImpl getDetachedCriteriaImpl() + { + return criteriaImpl; + } public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { Index: C:/dev_home/Hibernate/Hibernate3.2.6/src/org/hibernate/loader/criteria/CriteriaQueryTranslator.java =================================================================== --- C:/dev_home/Hibernate/Hibernate3.2.6/src/org/hibernate/loader/criteria/CriteriaQueryTranslator.java (revision 53) +++ C:/dev_home/Hibernate/Hibernate3.2.6/src/org/hibernate/loader/criteria/CriteriaQueryTranslator.java (working copy) @@ -20,7 +20,9 @@ import org.hibernate.QueryException; import org.hibernate.hql.ast.util.SessionFactoryHelper; import org.hibernate.criterion.CriteriaQuery; +import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Projection; +import org.hibernate.criterion.SubqueryExpression; import org.hibernate.engine.QueryParameters; import org.hibernate.engine.RowSelection; import org.hibernate.engine.SessionFactoryImplementor; @@ -114,6 +116,22 @@ String entityName = ( String ) iter.next(); result.addAll( Arrays.asList( getFactory().getEntityPersister( entityName ).getQuerySpaces() ) ); } + + iter = rootCriteria.iterateExpressionEntries(); + + while (iter.hasNext()) + { + CriteriaImpl.CriterionEntry entry = (CriteriaImpl.CriterionEntry) iter.next(); + + Criterion criterion = entry.getCriterion(); + + if (criterion instanceof SubqueryExpression) + { + SubqueryExpression subqueryExpression = (SubqueryExpression) criterion; + + result.addAll(Arrays.asList(getFactory().getEntityPersister( subqueryExpression.getDetachedCriteriaImpl().getEntityOrClassName() ).getQuerySpaces())); + } + } return result; }