我user
DB表看起来像这样:春天JPA仓库:防止更新上保存
CREATE TABLE user (
username VARCHAR(32) PRIMARY KEY,
first_name VARCHAR(256) NOT NULL,
last_name VARCHAR(256) NOT NULL,
password VARCHAR(32) NOT NULL,
enabled BOOL
) ENGINE = InnoDB;
这是我的实体的字段定义:
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String firstName;
@Column(nullable = false)
private String lastName;
@Column(nullable = false)
private String password;
领域username
是关键我表/实体,并由我来设定它的价值。 当我需要创建另一个用户,我做这在我的服务:
public User insertUserImpl(String username, String firstName, String lastName) {
Assert.hasText(username);
Assert.hasText(firstName);
Assert.hasText(lastName);
String password = UUID.randomUUID().toString().substring(0, 4); // temp
User user = new User(username, password);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setEnabled(false);
this.userRepository.save(user);
// FIXME - assegnare un ruolo
return user;
}
无论如何,如果用户名已被使用,仓库只是做一个更新,因为指定的标识符不为空。这不是我想要的行为,我需要它来抛出重复的条目异常。 有什么办法可以预防它吗?我必须自己做吗? 如:
User user = this.userRepository.findOne(username);
if(user != null) {
throw new RuntimeException("Username already taken"); // FIXME - eccezione applicativa
}
如果它正在更新值而不是进行新的插入,这意味着它认为它是同一个对象,但是具有更新的值,您是否在重复使用该对象以进行多次插入?你使用什么冲水模式? – saljuama
我不是在重复使用同一个对象,我编辑了文本,以便您可以看到完整的方法。我如何检查我的冲洗模式?我认为这是Spring Boot的默认设置,我没有对它做任何设置。 – Antonio