public ZipColumnMetaDataWriter writeColumnMetaDataEntry(final ColumnMetaData columnMetaData) throws IOException { setProperty(COLUMN_NAME, columnMetaData.getColumnName()); setProperty(COLUMN_CLASS_NAME, columnMetaData.getColumnClassName()); setProperty(COLUMN_TYPE_NAME, columnMetaData.getColumnTypeName()); setProperty(COLUMN_TYPE, String.valueOf(columnMetaData.getColumnType())); setProperty(COLUMN_PRECISION, String.valueOf(columnMetaData.getPrecision())); setProperty(COLUMN_PRECISION, String.valueOf(columnMetaData.getPrecision())); setProperty(COLUMN_SCALE, String.valueOf(columnMetaData.getScale())); setProperty(PRIMARY_KEY, String.valueOf(columnMetaData.isPrimaryKey())); setProperty(NULLABLE, String.valueOf(columnMetaData.isNullable())); setProperty(AUTO_INCREMENT, String.valueOf(columnMetaData.isAutoIncrement())); setProperty(COLUMN_ID, String.valueOf(((InternalColumnMetaData) columnMetaData).getColumnId())); final InternalColumnMetaData referencedColumn = (InternalColumnMetaData) columnMetaData.getReferencedColumn(); if (referencedColumn != null) { setProperty(COLUMN_REFERENCES, String.valueOf(referencedColumn.getColumnId())); } int i = 1; for (final Iterator<ColumnMetaData> iterator = columnMetaData.getReferencedByColumn().iterator(); iterator.hasNext(); i++) { final InternalColumnMetaData referencedByColumn = (InternalColumnMetaData) iterator.next(); setProperty(COLUMN_REFERENCED_BY_ID + i, String.valueOf(referencedByColumn.getColumnId())); setProperty(COLUMN_REFERENCED_BY + i, referencedByColumn.getColumnName()); } return this; }