protected UserTrackerPath toUnwrappedModel(UserTrackerPath userTrackerPath) {
    if (userTrackerPath instanceof UserTrackerPathImpl) {
      return userTrackerPath;
    }

    UserTrackerPathImpl userTrackerPathImpl = new UserTrackerPathImpl();

    userTrackerPathImpl.setNew(userTrackerPath.isNew());
    userTrackerPathImpl.setPrimaryKey(userTrackerPath.getPrimaryKey());

    userTrackerPathImpl.setMvccVersion(userTrackerPath.getMvccVersion());
    userTrackerPathImpl.setUserTrackerPathId(userTrackerPath.getUserTrackerPathId());
    userTrackerPathImpl.setUserTrackerId(userTrackerPath.getUserTrackerId());
    userTrackerPathImpl.setPath(userTrackerPath.getPath());
    userTrackerPathImpl.setPathDate(userTrackerPath.getPathDate());

    return userTrackerPathImpl;
  }
  /**
   * Returns an ordered range of all the user tracker paths where userTrackerId = ?.
   *
   * <p>Useful when paginating results. Returns a maximum of <code>end - start</code> instances.
   * <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result
   * set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start
   * </code> and <code>end</code> to {@link QueryUtil#ALL_POS} will return the full result set. If
   * <code>orderByComparator</code> is specified, then the query will include the given ORDER BY
   * logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start
   * </code> and <code>end</code> are not {@link QueryUtil#ALL_POS}), then the query will include
   * the default ORDER BY logic from {@link UserTrackerPathModelImpl}. If both <code>
   * orderByComparator</code> and pagination are absent, for performance reasons, the query will not
   * have an ORDER BY clause and the returned result set will be sorted on by the primary key in an
   * ascending order.
   *
   * @param userTrackerId the user tracker ID
   * @param start the lower bound of the range of user tracker paths
   * @param end the upper bound of the range of user tracker paths (not inclusive)
   * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
   * @return the ordered range of matching user tracker paths
   */
  @Override
  public List<UserTrackerPath> findByUserTrackerId(
      long userTrackerId,
      int start,
      int end,
      OrderByComparator<UserTrackerPath> orderByComparator) {
    boolean pagination = true;
    FinderPath finderPath = null;
    Object[] finderArgs = null;

    if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) && (orderByComparator == null)) {
      pagination = false;
      finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_USERTRACKERID;
      finderArgs = new Object[] {userTrackerId};
    } else {
      finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_USERTRACKERID;
      finderArgs = new Object[] {userTrackerId, start, end, orderByComparator};
    }

    List<UserTrackerPath> list =
        (List<UserTrackerPath>) FinderCacheUtil.getResult(finderPath, finderArgs, this);

    if ((list != null) && !list.isEmpty()) {
      for (UserTrackerPath userTrackerPath : list) {
        if ((userTrackerId != userTrackerPath.getUserTrackerId())) {
          list = null;

          break;
        }
      }
    }

    if (list == null) {
      StringBundler query = null;

      if (orderByComparator != null) {
        query = new StringBundler(3 + (orderByComparator.getOrderByFields().length * 3));
      } else {
        query = new StringBundler(3);
      }

      query.append(_SQL_SELECT_USERTRACKERPATH_WHERE);

      query.append(_FINDER_COLUMN_USERTRACKERID_USERTRACKERID_2);

      if (orderByComparator != null) {
        appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS, orderByComparator);
      } else if (pagination) {
        query.append(UserTrackerPathModelImpl.ORDER_BY_JPQL);
      }

      String sql = query.toString();

      Session session = null;

      try {
        session = openSession();

        Query q = session.createQuery(sql);

        QueryPos qPos = QueryPos.getInstance(q);

        qPos.add(userTrackerId);

        if (!pagination) {
          list = (List<UserTrackerPath>) QueryUtil.list(q, getDialect(), start, end, false);

          Collections.sort(list);

          list = Collections.unmodifiableList(list);
        } else {
          list = (List<UserTrackerPath>) QueryUtil.list(q, getDialect(), start, end);
        }

        cacheResult(list);

        FinderCacheUtil.putResult(finderPath, finderArgs, list);
      } catch (Exception e) {
        FinderCacheUtil.removeResult(finderPath, finderArgs);

        throw processException(e);
      } finally {
        closeSession(session);
      }
    }

    return list;
  }