docs: private static void readField(DatabaseFieldConfig config, String field, String value) {
  		if (field.equals(FIELD_NAME_FIELD_NAME)) {
  			config.setFieldName(value);
  		} else if (field.equals(FIELD_NAME_COLUMN_NAME)) {
  			config.setColumnName(value);
  		} else if (field.equals(FIELD_NAME_DATA_PERSISTER)) {
  			config.setDataPersister(DataType.valueOf(value).getDataPersister());
  		} else if (field.equals(FIELD_NAME_DEFAULT_VALUE)) {
  			config.setDefaultValue(value);
  		} else if (field.equals(FIELD_NAME_WIDTH)) {
  			config.setWidth(Integer.parseInt(value));
  		} else if (field.equals(FIELD_NAME_CAN_BE_NULL)) {
  			config.setCanBeNull(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_ID)) {
  			config.setId(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_GENERATED_ID)) {
  			config.setGeneratedId(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_GENERATED_ID_SEQUENCE)) {
  			config.setGeneratedIdSequence(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN)) {
  			config.setForeign(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_USE_GET_SET)) {
  			config.setUseGetSet(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_UNKNOWN_ENUM_VALUE)) {
  			String[] parts = value.split("#", -2);
  			if (parts.length != 2) {
  				throw new IllegalArgumentException(
  						"Invalid value for unknownEnumValue which should be in class#name format: " + value);
  			}
  			Class<?> enumClass;
  			try {
  				enumClass = Class.forName(parts[0]);
  			} catch (ClassNotFoundException e) {
  				throw new IllegalArgumentException("Unknown class specified for unknownEnumValue: " + value);
  			}
  			Object[] consts = enumClass.getEnumConstants();
  			if (consts == null) {
  				throw new IllegalArgumentException("Invalid class is not an Enum for unknownEnumValue: " + value);
  			}
  			@SuppressWarnings("rawtypes")
  			Enum[] enumConstants = (Enum[]) consts;
  			boolean found = false;
  			for (Enum<?> enumInstance : enumConstants) {
  				if (enumInstance.name().equals(parts[1])) {
  					config.setUnknownEnumValue(enumInstance);
  					found = true;
  				}
  			}
  			if (!found) {
  				throw new IllegalArgumentException("Invalid enum value name for unknownEnumvalue: " + value);
  			}
  		} else if (field.equals(FIELD_NAME_THROW_IF_NULL)) {
  			config.setThrowIfNull(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_FORMAT)) {
  			config.setFormat(value);
  		} else if (field.equals(FIELD_NAME_UNIQUE)) {
  			config.setUnique(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_UNIQUE_COMBO)) {
  			config.setUniqueCombo(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_INDEX)) {
  			config.setIndex(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_INDEX_NAME)) {
  			config.setIndex(true);
  			config.setIndexName(value);
  		} else if (field.equals(FIELD_NAME_UNIQUE_INDEX)) {
  			config.setUniqueIndex(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_UNIQUE_INDEX_NAME)) {
  			config.setUniqueIndex(true);
  			config.setUniqueIndexName(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN_AUTO_REFRESH)) {
  			config.setForeignAutoRefresh(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_MAX_FOREIGN_AUTO_REFRESH_LEVEL)) {
  			config.setMaxForeignAutoRefreshLevel(Integer.parseInt(value));
  		} else if (field.equals(FIELD_NAME_PERSISTER_CLASS)) {
  			try {
  				@SuppressWarnings("unchecked")
  				Class<? extends DataPersister> clazz = (Class<? extends DataPersister>) Class.forName(value);
  				config.setPersisterClass(clazz);
  			} catch (ClassNotFoundException e) {
  				throw new IllegalArgumentException("Could not find persisterClass: " + value);
  			}
  		} else if (field.equals(FIELD_NAME_ALLOW_GENERATED_ID_INSERT)) {
  			config.setAllowGeneratedIdInsert(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_COLUMN_DEFINITION)) {
  			config.setColumnDefinition(value);
  		} else if (field.equals(FIELD_NAME_FULL_COLUMN_DEFINITION)) {
  			config.setFullColumnDefinition(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN_AUTO_CREATE)) {
  			config.setForeignAutoCreate(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_VERSION)) {
  			config.setVersion(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLUMN_NAME)) {
  			config.setForeignColumnName(value);
  		} else if (field.equals(FIELD_NAME_READ_ONLY)) {
  			config.setReadOnly(Boolean.parseBoolean(value));
  		}
  		/**
  		 * foreign collection field information
  		 */
  		else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION)) {
  			config.setForeignCollection(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_EAGER)) {
  			config.setForeignCollectionEager(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_MAX_EAGER_FOREIGN_COLLECTION_LEVEL_OLD)) {
  			config.setForeignCollectionMaxEagerLevel(Integer.parseInt(value));
  		} else if (field.equals(FIELD_NAME_MAX_EAGER_FOREIGN_COLLECTION_LEVEL)) {
  			config.setForeignCollectionMaxEagerLevel(Integer.parseInt(value));
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_COLUMN_NAME)) {
  			config.setForeignCollectionColumnName(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_ORDER_COLUMN_NAME_OLD)) {
  			config.setForeignCollectionOrderColumnName(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_ORDER_COLUMN_NAME)) {
  			config.setForeignCollectionOrderColumnName(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_ORDER_ASCENDING)) {
  			config.setForeignCollectionOrderAscending(Boolean.parseBoolean(value));
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_FOREIGN_FIELD_NAME_OLD)) {
  			config.setForeignCollectionForeignFieldName(value);
  		} else if (field.equals(FIELD_NAME_FOREIGN_COLLECTION_FOREIGN_FIELD_NAME)) {
  			config.setForeignCollectionForeignFieldName(value);
  		}
  	}