/**
   * Adds the query to the named queries.
   *
   * @param name the name fo the query
   * @param query the query
   * @since 2.0.0
   */
  public void addNamedQuery(final String name, Query query) {
    final QueryImpl<?> typedQuery = (QueryImpl<?>) query;
    final String jpql = typedQuery.getCriteriaQuery().getJpql();

    new JpqlQuery(
        this,
        this.criteriaBuilder,
        new NamedQueryMetadata() {

          @Override
          public Map<String, Object> getHints() {
            return typedQuery.getHints();
          }

          @Override
          public AbstractLocator getLocator() {
            return null;
          }

          @Override
          public LockModeType getLockMode() {
            return typedQuery.getLockMode();
          }

          @Override
          public String getName() {
            return name;
          }

          @Override
          public String getQuery() {
            return jpql;
          }
        });
  }
  /** {@inheritDoc} */
  @Override
  @SuppressWarnings("unchecked")
  public T handle(QueryImpl<?> query, SessionImpl session, ResultSet row) throws SQLException {
    final T value = query.getParameterValue(this);

    return (T) (this.getConverter() != null ? this.getConverter().convert(value) : value);
  }