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
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage