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; }