private void fillTargetTable() throws SQLException {
		log.debug("Filling target table...");

		int batchSize = config.getBatchSize(model.getTargetTable());

		JdbcValueReader jdbcValueReader = jdbcValueReaderProvider
				.getValueReaderFor(model.getTargetTable());

		Iterable<String> sourceColumns = model.getSourceColumns();

		PreparedStatement select = sourceDbAgent.prepareSelectStatement(
				model.getSourceTable(), sourceColumns);
		PreparedStatement insert = targetDbAgent.prepareInsertStatement(
				model.getTargetTable(), model.getTargetColumns());

		int currentBatchSize = 0;
		ResultSet rs = select.executeQuery();
		while (rs.next()) {
			int col = 0;
			for (String colName : sourceColumns) {
				col++;
				Object value = jdbcValueReader.readValue(rs, col, colName);
				insert.setObject(col, value);
			}
			insert.addBatch();
			currentBatchSize++;

			if (currentBatchSize >= batchSize) {
				insert.executeBatch();
				currentBatchSize = 0;
				targetDbAgent.commit();
			}
		}
		if (currentBatchSize > 0) {
			insert.executeBatch();
			targetDbAgent.commit();
		}
		insert.close();
	}