So deaktivieren Sie die Überprüfung des Ruhezustands in einem Spring Boot-Projekt

Ich habe ein Spring-Boot-Projekt mit einem CrudRepository, einer Entität und einem Controller. Ich versuche im Grunde, eine Entität auf der Grundlage der an den Controller übergebenen Daten beizubehalten.

Um dies zu tun, benutze ichspring-boot-starter-jpa. Meine Entität ist mit JSR-303-Anmerkungen versehen, die im Controller @ markiert sinVo Die Daten werden zur Persistenz an das CrudRepository übergeben.

Controller-Methode:

@RequestMapping(value = "users", method = { RequestMethod.POST })
public SuccessfulResponse<User> addUser(@Valid @RequestBody User user, BindingResult validation) {
    if (validation.hasErrors()) {
        throw new ValidationException(validation);
    }
    User saved = this.users.save(user);
    return new SuccessfulResponse<User>(saved);
}

Entität

@Entity /* JPA */
public class User {

   @Id /* JPA */
   @Column(name="email_address", nullable=false, length=255) /* JPA */
   @UserUnique
   private String emailAddress;

}

Die Ursache meiner Probleme ist dasUserUnique Anmerkung. Sein Validator sieht folgendermaßen aus:

public class UserUniqueValidator implements ConstraintValidator<UserUnique, String> {

   private UserRepository users;

   @Autowired
   public UserUniqueValidator(UserRepository users) {
       this.users = users;
   }

   @Override
   public void initialize(UserUnique annotation) {}

   @Override
   public boolean isValid(String value, ConstraintValidatorContext context) {
       return users.findOne(value) == null;
   }
}

Was zu passieren scheint, ist, dass die Validierung zweimal ausgeführt wird. Einmal in der Steuerung über das@Valid Annotation und einmal, wenn Hibernate versucht, das Objekt beizubehalten. Wenn Hibernate versucht, das Objekt beizubehalten, gibt es jedoch Folgendes aus:

javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: class test.UserUniqueValidator`

Das scheint daran zu liegen, dass es nicht federbewusst ist und die Abhängigkeit nicht in den Konstruktor einschleusen kann. Ich möchte also die Überprüfung des Ruhezustands vollständig deaktivieren (da sie redundant ist und bereits auf dem Controller ausgeführt wird).

Es scheint eine Eigenschaft namens @ zu gebjavax.persistence.validation.mode welches du auf @ setzen kannnone. Allerdings kann ich nicht für mein ganzes Leben herausfinden, wo ich es in einer codebasierten Konfiguration einstellen soll.

Ich stelle fest, es gibt Fragen wie JSR-303 Abhängigkeitsinjektion und Ruhezustand Diese verwenden jedoch alle xml config und konfigurieren Teile der Persistenzschicht manuell.

Ich möchte die erforderlichen Teile der von Spring Boot für mich erstellten Persistenz-Ebene nachkonfigurieren, da ich die automatische Konfiguration von Spring Boot nicht mehr nutze, wenn ich meine eigene definiere. Kann mir jemand helfen festzustellen, ob 1) dies möglich ist und 2) welche Teile ich konfigurieren muss und wie?

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage