docs: @Override
      public void merge(Collection<Bean> beans) throws AbortRuntimeException {
          init();
          Map<HBeanRow, HBeanRow> providedRows = new HashMap<>();
          for (Bean bean : beans) {
              HBeanRow row = new HBeanRow(bean, uids);
              providedRows.put(row, row);
              for (BeanId id : bean.getReferences()) {
                  HBeanRow refRow = new HBeanRow(id, uids);
                  providedRows.put(refRow, refRow);
              }
          }
          HBeanRowCollector storedCollector = null;
          try {
              storedCollector = table.getEager(providedRows);
          } catch (HBeanNotFoundException e) {
              // only throw exception if the bean was not provided
              if (!idsFoundIn(beans, e)) {
                  throw Events.CFG301_MISSING_RUNTIME_REF(e.getNotFound().iterator().next());
              }
          }
  
          Map<HBeanRow, HBeanRow> storedRows = storedCollector.getRowMap();
          Set<RowMutations> mutations = new HashSet<>();
  
          for (HBeanRow provided : providedRows.keySet()) {
              HBeanRow stored = storedRows.get(provided);
              RowMutations rowMutations = new RowMutations(provided.getRowKey());
              Set<HBeanRow> deleteReferences = stored.merge(provided, rowMutations);
              try {
                  deleteReferences = table.getLazy(deleteReferences);
                  for (HBeanRow row : deleteReferences) {
                      RowMutations mutation = row.removePredecessor(provided);
                      mutations.add(mutation);
                  }
              } catch (HBeanNotFoundException e) {
                  throw new IllegalStateException("Broken predecessors");
              }
              mutations.add(rowMutations);
          }
          table.mutate(mutations);
      }