code: public static QueryException fromThrowable(String message, Throwable cause) {
      return (cause instanceof QueryException && Objects.equals(message, cause.getMessage()))
                     ? (QueryException) cause
                     : new QueryException(message, cause);
    }
docs: Converts a Throwable to a QueryException with the specified detail message. If the Throwable is
  a QueryException and if the Throwable's message is identical to the one supplied, the Throwable
  will be passed through unmodified; otherwise, it will be wrapped in a new QueryException with
  the detail message.
  
  @param cause       the Throwable to convert
  @param message the specified detail message
  
  @return a QueryException