public ScrollableResults scroll(
     final QueryParameters queryParameters, final SessionImplementor session)
     throws HibernateException {
   HolderInstantiator hi =
       HolderInstantiator.createClassicHolderInstantiator(
           holderConstructor, queryParameters.getResultTransformer());
   return scroll(queryParameters, returnTypes, hi, session);
 }
  /** Return the query results as an iterator */
  public Iterator iterate(QueryParameters queryParameters, EventSource session)
      throws HibernateException {

    boolean stats = session.getFactory().getStatistics().isStatisticsEnabled();
    long startTime = 0;
    if (stats) startTime = System.currentTimeMillis();

    try {

      PreparedStatement st = prepareQueryStatement(queryParameters, false, session);
      ResultSet rs =
          getResultSet(
              st,
              queryParameters.hasAutoDiscoverScalarTypes(),
              false,
              queryParameters.getRowSelection(),
              session);
      HolderInstantiator hi =
          HolderInstantiator.createClassicHolderInstantiator(
              holderConstructor, queryParameters.getResultTransformer());
      Iterator result = new IteratorImpl(rs, st, session, returnTypes, getColumnNames(), hi);

      if (stats) {
        session
            .getFactory()
            .getStatisticsImplementor()
            .queryExecuted("HQL: " + queryString, 0, System.currentTimeMillis() - startTime);
      }

      return result;

    } catch (SQLException sqle) {
      throw JDBCExceptionHelper.convert(
          getFactory().getSQLExceptionConverter(),
          sqle,
          "could not execute query using iterate",
          getSQLString());
    }
  }