/** @since 3.0 */
  void checkPageResultConsistency(List<?> objects, List<?> ids) {

    if (objects.size() < ids.size()) {
      // find missing ids
      StringBuilder buffer = new StringBuilder();
      buffer.append("Some ObjectIds are missing from the database. ");
      buffer.append("Expected ").append(ids.size()).append(", fetched ").append(objects.size());

      boolean first = true;
      for (Object id : ids) {
        boolean found = false;

        for (Object object : objects) {

          if (helper.replacesObject(object, id)) {
            found = true;
            break;
          }
        }

        if (!found) {
          if (first) {
            first = false;
          } else {
            buffer.append(", ");
          }

          buffer.append(id.toString());
        }
      }

      throw new CayenneRuntimeException(buffer.toString());
    } else if (objects.size() > ids.size()) {
      throw new CayenneRuntimeException(
          "Expected " + ids.size() + " objects, retrieved " + objects.size());
    }
  }