@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()); } }