Caso o framework não seja informado sobre qual coluna é a chave, ele retornará todas as colunas da tabela como chaves.
Você pode informá-lo passando um novo parâmetro para o método de atualização, da seguinte forma:
template.update(query, data, keyHolder, new String[] { "id" });
Consulte NamedParameterJdbcTemplate. update(sql, paramSource, createdKeyHolder, keyColumnNames)