コード例 #1
0
  public Object objectByNamedQuery(SearchParameters sp) {
    if (sp == null || !sp.hasNamedQuery()) {
      throw new IllegalStateException(
          "Invalid search template provided: could not determine which namedQuery to use");
    }

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

    // append select count if needed
    if (queryString != null
        && queryString.toLowerCase().startsWith("from")
        && !queryString.toLowerCase().contains("count(")) {
      query = recreateQuery(query, "select count(*) " + queryString);
    }

    setQueryParameters(query, sp);

    log.debug("objectNamedQuery : {}", sp.toString());

    // execute
    Object result = query.getSingleResult();

    if (log.isDebugEnabled()) {
      log.debug(
          "{} returned a {} object",
          sp.getNamedQuery(),
          result == null ? "null" : result.getClass());
      if (result instanceof Number) {
        log.debug("{} returned a number with value : {}", sp.getNamedQuery(), result);
      }
    }

    return result;
  }