Spring JPA Repository: Update beim Speichern verhindern
Myuser
DB-Tabelle sieht so aus:
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;
Dies sind die Felddefinitionen meiner Entität:
@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;
Das Feldusername
ist der Schlüssel meiner Tabelle / Entität und es liegt an mir, den Wert festzulegen. Wenn ich einen anderen Benutzer erstellen muss, tue ich dies in meinem Dienst:
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;
}
Anyway, wenn der Benutzername bereits vergeben ist, führt das Repository nur eine Aktualisierung durch, da der angegebene Bezeichner nicht null ist. Dies ist nicht das Verhalten, das ich möchte, ich brauche es, um so etwas wie eine Ausnahme für doppelte Einträge auszulösen. Gibt es eine Möglichkeit, dies zu verhindern? Muss ich das alleine machen? Z.B.
User user = this.userRepository.findOne(username);
if(user != null) {
throw new RuntimeException("Username already taken"); // FIXME - eccezione applicativa
}