Comment désactiver la validation Hibernate dans un projet Spring Boot
J'ai un ressort de démarrage du projet qui a un CrudRepository, une Entité et un Contrôleur. Je suis en fait, d'essayer de persister une entité basée sur les données transmises au Contrôleur.
Pour ce faire, je suis en utilisant spring-boot-starter-jpa
. Mon Entité est annoté avec la JSR-303 annotations, qui sont vérifiées dans le contrôleur avant les données sont transmises à la CrudRepository pour la persistance.
Méthode de contrôleur:
@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é:
@Entity /* JPA */
public class User {
@Id /* JPA */
@Column(name="email_address", nullable=false, length=255) /* JPA */
@UserUnique
private String emailAddress;
}
La cause de mes problèmes est le UserUnique
annotation. Son programme de validation ressemble à ceci:
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;
}
}
Ce qui semble se passer, c'est, la validation doit se faire deux fois. Une fois dans le contrôleur via le @Valid
annotation, et une fois quand Hibernate tente de persister l'objet. Cependant, quand Hibernate essaie conserver l'objet, il lance:
javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: class test.UserUniqueValidator`
Ce qui semble être à cause de ses pas le printemps-conscient et je ne peux injecter de la dépendance dans le constructeur. Donc, ce que je veux faire est de désactiver la veille prolongée de validation complètement (comme sa redondant et déjà le cas dans le contrôleur).
Il semble y avoir une propriété appelée javax.persistence.validation.mode
que vous pouvez configurer pour none
. Cependant, je ne peux pas pour la vie de me comprendre à l'endroit où le mettre dans une base de code de configuration.
Je me rends compte il ya des questions comme La JSR-303 injection de dépendance et d'Hibernation mais ils sont tous à l'aide de xml de configuration et configuration manuelle des parties de la couche de persistance.
Ce que je veux faire est de "post-configurer" les pièces nécessaires de la couche de persistance que le Printemps de Démarrage crée pour moi, parce que si je définir ma propre alors je ne suis plus en tirant parti de Printemps de Démarrage de la configuration automatique. Quelqu'un peut-il m'aider à déterminer si 1) c'est possible et 2) quelles pièces dois-je configurer et comment?
Merci!
source d'informationauteur Erin Drummond
Vous devez vous connecter pour publier un commentaire.
Que [M. Deinum] mentionné dans un commentaire sur mon post original, la solution est de définir:
Dans le
application.properties
fichier.En outre, ce comportement est décrit ici (il est facile de manquer parce que aucun exemple n'est fourni).