当我尝试使用Spring来更新具有不同值的用户时,例如,不修改昵称:
//TODO: encripta contraseña monitorDao
public void updateMonitor(Monitor monitor){
BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
String contrasenya = passwordEncryptor.encryptPassword(monitor.getContrasenya());
this.jdbcTemplate.update(
"update Usuario set nickname=?, nombre= ?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?, telefono = ?",
monitor.getNickname(), monitor.getNombre(), monitor.getApellidos(), monitor.getEmail(),
contrasenya, monitor.getEspecialidades(), monitor.getTelefono()
);
}
发生这种情况:
请求处理失败;嵌套异常是 org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [更新Usuario set nickname =?,nombre = ?,apellidos = ?, email = ?, contrasenya = ?, especialidades = ?,, telefono =?];错误:重复键值违反唯一约束 “pk_usuario”
答案 0 :(得分:3)
我从未使用过JDBC模板,但看起来您的SQL中没有where子句,因此您需要更新数据库中的所有行以获取这些值。您需要通过添加where子句将其限制为单个用户:
this.jdbcTemplate.update(
"update Usuario set nickname=?, nombre= ?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?, telefono = ? where nickname=?",
monitor.getNickname(), monitor.getNombre(), monitor.getApellidos(), monitor.getEmail(),
contrasenya, monitor.getEspecialidades(), monitor.getTelefono(), monitor.getNickname()
);
答案 1 :(得分:0)
在我看来你应该试试这个:
this.jdbcTemplate.update(
"update Usuario set nombre= ?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?, telefono = ? where nickname=?",
monitor.getNombre(), monitor.getApellidos(), monitor.getEmail(),
contrasenya, monitor.getEspecialidades(), monitor.getTelefono(), monitor.getNickname()
);
这不会更新昵称。