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;
字段用户名是我的表/实体的密钥,由我来设置其值.
当我需要创建另一个用户时,我在我的服务中执行此操作:
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
}