class MetaDataManager {

    public TableMetaData getTableMetaData(final String tableName) {
        if (!tableMetaDataMap.containsKey(tableName)) {
            try {
                TableMetaDataLoader.load(dataSource, tableName, "").ifPresent(tableMetaData -> tableMetaDataMap.put(tableName, tableMetaData));
            } catch (final SQLException ex) {
                throw new RuntimeException(String.format("Load metaData for table %s failed", tableName), ex);
            }
        }
        return tableMetaDataMap.get(tableName);
    }

}