Spring 当userRepositary尝试在数据库中保存新用户时,我的验证程序失败

Spring 当userRepositary尝试在数据库中保存新用户时,我的验证程序失败,spring,hibernate,spring-boot,validation,Spring,Hibernate,Spring Boot,Validation,我尝试创建我的验证注释 当验证失败时,工作正常。我收到一条关于你的消息。但当验证通过时,我会得到回滚异常 我在验证注释中做什么 我想检查用户表中的唯一电子邮件。因此,我创建了@annotation: package ru.project.domain.validation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Ret

我尝试创建我的验证注释

当验证失败时,工作正常。我收到一条关于你的消息。但当验证通过时,我会得到回滚异常

我在验证注释中做什么

我想检查用户表中的唯一电子邮件。因此,我创建了@annotation:

package ru.project.domain.validation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Constraint(validatedBy = UniqueEmailValidator.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface UniqueEmail {

    public String message() default "e-mail exist!";

    public Class<?>[] groups() default {};

    public Class<? extends Payload>[] payload() default{};

}
在第二次运行期间,userService=null: 试试这个:

ExtendedEmailValidator.java:
@电子邮件(message=“请提供有效的电子邮件地址”)
@模式(regexp=“.++.+\\..+”,message=“请提供有效的电子邮件地址”)
@目标({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@保留(RetentionPolicy.RUNTIME)
@约束(validatedBy={})
@记录
public@interface ExtendedEmailValidator{
String message()默认为“请提供有效的电子邮件地址”;
类[]组()默认值{};

类一个决定是在“hibernate”在数据库中保存实体时关闭检查。为此,需要在应用程序中设置下一个属性。属性

spring.jpa.properties.javax.persistence.validation.mode=none


你检查了
isEmailAlredyUse
方法了吗?它看起来像是返回了
null
我现在已经检查过了。结果是,当第二次执行isValid时,userService=null。我如何修复它呢?看看有问题的图片它看起来像jpa会再次进行验证。你能试着用
@C注释你的验证类吗component
如果我没有弄错,控制器应该在没有注释的情况下运行,因为所有检查逻辑都显示在@Controler中。有关错误的信息是手动添加的。
package ru.project.domain.validation;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.springframework.beans.factory.annotation.Autowired;

import ru.project.service.UserService;

public class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, String> {

    @Autowired
    private UserService userService;

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value != null && !userService.isEmailAlredyUse(value);
    }

}
public boolean isEmailAlredyUse(String value) {
        User user = userRepository.findByEmail(value);
        if(user != null) {
            return true;
        }
        return false;
    }