docs: public void storeMtoNImplementor(CollectionDescriptor cod, Object realObject, Object otherObj, Collection mnKeys)
      {
          ClassDescriptor cld = pb.getDescriptorRepository().getDescriptorFor(realObject.getClass());
          ValueContainer[] pkValues = pb.serviceBrokerHelper().getKeyValues(cld, realObject);
          String[] pkColumns = cod.getFksToThisClass();
  
          ClassDescriptor otherCld = pb.getDescriptorRepository().getDescriptorFor(ProxyHelper.getRealClass(otherObj));
          ValueContainer[] otherPkValues = pb.serviceBrokerHelper().getKeyValues(otherCld, otherObj);
  
          String[] otherPkColumns = cod.getFksToItemClass();
          String table = cod.getIndirectionTable();
          MtoNBroker.Key key = new MtoNBroker.Key(otherPkValues);
  
          if(mnKeys.contains(key))
          {
              return;
          }
  
          /*
          fix for OJB-76, composite M & N keys that have some fields common
          find the "shared" indirection table columns, values and remove these from m- or n- side
          */
          for(int i = 0; i < otherPkColumns.length; i++)
          {
              int index = ArrayUtils.indexOf(pkColumns, otherPkColumns[i]);
              if(index != -1)
              {
                  // shared indirection table column found, remove this column from one side
                  pkColumns = (String[]) ArrayUtils.remove(pkColumns, index);
                  // remove duplicate value too
                  pkValues = (ValueContainer[]) ArrayUtils.remove(pkValues, index);
              }
          }
  
          String[] cols = mergeColumns(pkColumns, otherPkColumns);
          String insertStmt = pb.serviceSqlGenerator().getInsertMNStatement(table, pkColumns, otherPkColumns);
          ValueContainer[] values = mergeContainer(pkValues, otherPkValues);
          GenericObject gObj = new GenericObject(table, cols, values);
          if(! tempObjects.contains(gObj))
          {
              pb.serviceJdbcAccess().executeUpdateSQL(insertStmt, cld, pkValues, otherPkValues);
              tempObjects.add(gObj);
          }
      }