@Override
  protected void resetCollectionParent(
      final DatabaseConnector connector,
      final ObjectAdapter parent,
      final Iterator<ObjectAdapter> elements) {
    LOG.debug("Saving polymorphic list");

    ObjectSpecification elementSpecification;
    while (elements.hasNext()) {
      final ObjectAdapter thisAdapter = elements.next();
      elementSpecification = thisAdapter.getSpecification();

      // Reinstall collection parent
      final StringBuffer update = new StringBuffer();
      update.append("INSERT INTO ");
      update.append(table);
      update.append(" (");
      // list of column names
      super.getIdMapping().appendColumnNames(update);
      update.append("," + getForeignKeyName());
      update.append(", " + itemIdColumnName);
      update.append("," + classColumnName);
      update.append(") VALUES (");

      // Row ID column
      final Object pojo = thisAdapter.getObject();
      final RootOid transientRootOid = oidGenerator.createTransientOid(pojo);

      final RootOid persistentRootOid = oidGenerator.createPersistent(pojo, transientRootOid);

      polyIdMapper.appendObjectId(connector, update, persistentRootOid);

      // polyIdMapper.appendObjectId(connector, update,
      // thisAdapter.getOid());
      update.append(",");

      // Foreign key ID column
      getForeignKeyMapping().appendInsertValues(connector, update, parent);
      update.append(",");

      // item Id column
      final RootOid oid = (RootOid) thisAdapter.getOid();
      getIdMapping().appendObjectId(connector, update, oid);

      // Class name column
      update.append(",?)");
      connector.addToQueryValues(elementSpecification.getFullIdentifier());

      connector.insert(update.toString());
    }
  }