Se il framework non è informato su quale colonna è la chiave, restituirà tutte le colonne della tabella come chiavi.
Puoi informarlo passando un nuovo parametro al metodo di aggiornamento, come segue:
template.update(query, data, keyHolder, new String[] { "id" });
Vedi NamedParameterJdbcTemplate. update(sql, paramSource, generatedKeyHolder, keyColumnNames)