Custom validator causes StackOverflowException

Hi, i want to implement ConstraintsValidator which verifies whether an email is available before registering a new user, using spring’s depandency injection “@Autowired” to inject JPA Repository in the validator to make database search.

i so changed hibernate’s validator factory so that spring instanciate the validator so that i can use @Autowired

Everything works fine, however it’s like the validation is entering a infinite loop which causes a stackoverflowexception.

Note: lthe validation is done automaticlly (i’m not calling validator.validate()) as i’m using REST JPA Repository

 @Getter @Setter @Entity @UniqueCompteEmail @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public abstract class Compte implements Serializable, UserDetails {	private static final long serialVersionUID = -5230227676515387462L;	@Id	@GeneratedValue(strategy = GenerationType.SEQUENCE)	private Integer id;	@NotBlank	@NotNull	@Column(unique = true)	private String username;	@NotNull	@NotBlank	@Size(min = 6)	private String password;	@Email	@NotNull	@NotBlank	@Column(unique = true)	private String email;	@Override	public Collection<? extends GrantedAuthority> getAuthorities() {	return new HashSet<GrantedAuthority>();	}	@Override	public String getPassword() {	return this.password;	}	@Override	public String getUsername() {	return this.username;	}	@Override	public boolean isAccountNonExpired() {	return true;	}	@Override	public boolean isAccountNonLocked() {	return true;	}	@Override	public boolean isCredentialsNonExpired() {	return true;	}	@Override	public boolean isEnabled() {	return true;	}	public abstract CompteType getTypeCompte();	public abstract void setTypeCompte(CompteType typeCompte);	public static enum CompteType {	ETUDIANT, ADMINISTRATEUR	} } @Repository public interface CompteRepository extends JpaRepository<Compte, Integer> {	public Optional<Compte> findByUsername(String username);	public Optional<Compte> findByEmail(String email); } @Documented @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = UniqueCompteEmailValidator.class) @Target({ ElementType.TYPE }) public @interface UniqueCompteEmail {	String message() default "{com.mssmfactory.bacsimulator.uniquecompteemail.message}";	Class<?>[] groups() default {};	Class<? extends Payload>[] payload() default {}; } public class UniqueCompteEmailValidator implements ConstraintValidator<UniqueCompteEmail, Compte> { @Autowired private CompteRepository compteRepository; @Override public void initialize(UniqueCompteEmail constraintAnnotation) { } @Override public boolean isValid(Compte value, ConstraintValidatorContext context) { if (value != null) { Optional<Compte> compte = this.compteRepository.findByEmail(value.getEmail()); return !compte.isPresent(); } else return false; } } @Component public class ValidatorAddingCustomizer implements HibernatePropertiesCustomizer {	@Autowired	private ValidatorFactory validatorFactory;	public void customize(Map<String, Object> hibernateProperties) {	if (validatorFactory != null) {	hibernateProperties.put("javax.persistence.validation.factory", validatorFactory);	}	} }