コード例 #1
0
  public <T> List<T> findByNamedQuery(SearchParameters sp) {
    if (sp == null || !sp.hasNamedQuery()) {
      throw new IllegalArgumentException(
          "searchParameters must be non null and must have a namedQuery");
    }

    Query query = entityManager.createNamedQuery(sp.getNamedQuery());
    String queryString = getQueryString(query);

    // append order by if needed
    if (queryString != null && sp.hasOrders()) {
      // create the sql restriction clausis
      StringBuilder orderClausis = new StringBuilder("order by ");
      boolean first = true;
      for (OrderBy orderBy : sp.getOrders()) {
        if (!first) {
          orderClausis.append(", ");
        }
        orderClausis.append(orderBy.getColumn());
        orderClausis.append(orderBy.isOrderDesc() ? " desc" : " asc");
        first = false;
      }

      if (log.isDebugEnabled()) {
        log.debug("appending: [" + orderClausis.toString() + "] to " + queryString);
      }

      query = recreateQuery(query, queryString + " " + orderClausis.toString());
    }

    // pagination
    if (sp.getFirstResult() >= 0) {
      query.setFirstResult(sp.getFirstResult());
    }
    if (sp.getMaxResults() > 0) {
      query.setMaxResults(sp.getMaxResults());
    }

    // named parameters
    setQueryParameters(query, sp);

    // execute
    @SuppressWarnings("unchecked")
    List<T> result = (List<T>) query.getResultList();

    if (result != null && log.isDebugEnabled()) {
      log.debug(sp.getNamedQuery() + " returned a List of size: " + result.size());
    }

    return result;
  }