code: public void setBindValues(Collection<BindAttribute> bindValues) throws CpoException {
  
      if (bindValues != null) {
        int index = getStartingIndex();
  
        //runs through the bind attributes and binds them to the prepared statement
        // They must be in correct order.
        for (BindAttribute bindAttr : bindValues) {
          Object bindObject = bindAttr.getBindObject();
          CpoAttribute cpoAttribute = bindAttr.getCpoAttribute();
  
          // check to see if we are getting a cpo value object or an object that
          // can be put directly in the statement (String, BigDecimal, etc)
          MethodMapEntry<?, ?> jsm = ((MethodMapper<?>)getMethodMapper()).getDataMethodMapEntry(bindObject.getClass());
  
          if (jsm != null) {
            try {
              if (cpoAttribute == null) {
                localLogger.debug(bindAttr.getName() + "=" + bindObject);
              } else {
                localLogger.debug(cpoAttribute.getDataName() + "=" + bindObject);
              }
              jsm.getBsSetter().invoke(this.getBindableStatement(), index++, bindObject);
            } catch (IllegalAccessException iae) {
              localLogger.error("Error Accessing Prepared Statement Setter: " + ExceptionHelper.getLocalizedMessage(iae));
              throw new CpoException(iae);
            } catch (InvocationTargetException ite) {
              localLogger.error("Error Invoking Prepared Statement Setter: " + ExceptionHelper.getLocalizedMessage(ite));
              throw new CpoException(ite.getCause());
            }
          } else {
            CpoData cpoData = getCpoData(cpoAttribute, index++);
            cpoData.invokeSetter(bindObject);
          }
        }
      }
    }
docs: Called by the CPO Framework. Binds all the attibutes from the class for the CPO meta parameters and the parameters
  from the dynamic where.