Прочитав это, испытав краткий момент отказа, ища какой-то способ сделать это с помощью оператора MERGE, затем, наконец, приняв комментарий APC, я остановился на следующей альтернативе, которая может быть полезна кому-то еще:
public List upsert(String updateSql, String insertSql, Map data){
List ids = new ArrayList();
Map params = new HashMap();
params.put("name", data.get("name"));
if(data.get("personId") != null){
params.put("personId", data.get("personId"));
int rowCount = jdbcTemplate.update(updateSql, params);
if(rowCount == 1){
ids.add(data.get("personId"));
}
}else{
keyHolder = new GeneratedKeyHolder();
int rowCount = jdbcTemplate.update(insertSql, params, keyHolder);
if(rowCount == 1){
ids.add(keyHolder.getKey().intValue());
}
}
return ids;
}