Spring Hibernate验证-自动连线返回空值

Spring Hibernate验证-自动连线返回空值,spring,spring-boot,hibernate,spring-mvc,hibernate-validator,Spring,Spring Boot,Hibernate,Spring Mvc,Hibernate Validator,环顾四周,我找不到解决这个问题的好办法 我的自动连线没有按预期工作,返回null。我已经在其他类中自动连接了这个特殊的类,它可以工作,所以它只在constraintvalidator类中不工作 用户服务类 @Service public class UserService { @Autowired private UserRepository userRep; public void addUser(User user) { userRep.s

环顾四周,我找不到解决这个问题的好办法

我的自动连线没有按预期工作,返回null。我已经在其他类中自动连接了这个特殊的类,它可以工作,所以它只在constraintvalidator类中不工作

用户服务类

@Service
public class UserService {

    @Autowired
    private UserRepository userRep;
    
    public void addUser(User user) {
        userRep.save(user);
    }
    
    
    public void deleteUser(long userId) {
        userRep.deleteById(userId);
    }
    
    public List<User> retrieveAllUsers(){
        Iterable<User>temp =userRep.findAll();
        List<User>allUsers = null;
        temp.forEach(allUsers::add);
        return allUsers;
    }
    
    public boolean searchByEmail(String email) {
        return userRep.findByEmail(email);
    }
    
    public void updateUser(User user) {
        userRep.save(user);
    }
}


编辑:尝试@Componenet

编辑:我的建议

使用现有的@EMail和唯一约束,而不是自定义验证器:

@Entity
public class User {
  // ...your properties

  @Email
  @Column(unique = true)
  private String email.

  // Rest of class...
}
旧版:

因此,首先:

List<User> users = service.retrieveAllUsers();
    if (users.size() > 0) { 
此外,您的服务不会被注入,因为
EmailValidator
是一个POJO(普通旧java对象),而不是Spring管理的组件。如果用
@组件
@服务
对其进行注释,Spring将负责注入

但我不建议这样做。我不确定您的具体用例是什么,但验证器通常用于实体,因此,在创建或更新实体时会调用验证器。在这些情况下,您不希望发出额外的查询


就像我说的,我不知道你到底想实现什么,但是你可以使用现有的
@Email
验证器(你甚至可以提供一个自定义的正则表达式)。

通过在application.properties中添加以下内容来修复。不知道为什么,但它是有效的

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

我尝试了@component,但没有成功。我正在尝试验证数据库中是否已经存在新的电子邮件输入,以及是否遵循电子邮件regexpossible,因为验证器位于未包含在
@ComponentScan
中的包中。如果你把你的Applicaton类放在一个“高于”其他所有东西的包中,你甚至不需要它(例如在'com.Alex'中)。但是,我认为您不希望验证器成为托管组件,也不希望在这里发出查询。你想实现什么?我试图在componentscan中包含这个包,但没有成功。我正在做一个自定义注释来验证字段电子邮件。是的,我得到了。。。但是在哪里使用这个注释呢?您正在检查具有给定电子邮件的用户是否存在。这告诉我,您实际上需要某种关系,例如,现有用户在用户类类型级别下下的订单。是的,如果新用户输入电子邮件,新电子邮件不应该已经存在于其他现有用户的对象中。如果我把这个项目上传到github上,你会觉得很酷吗?看看什么有用?注射还是实际验证?因为这将关闭验证。问题现在运行时不会出现任何异常。但是,运行注释会在.retrieveAllUsers中获得nullexception。我试图找出与注释无关的outWell,您的代码只是有一个bug:
allUsers=null;allUsers::add
您可以将allUsers设置为null。您应该创建一个新的ArrayList。虽然我不认为你一定需要转换结果。I four repo扩展了org.springframework.data.jpa.repository.JpaRepository,它有一个findAll方法返回列表。
@Entity
public class User {
  // ...your properties

  @Email
  @Column(unique = true)
  private String email.

  // Rest of class...
}
List<User> users = service.retrieveAllUsers();
    if (users.size() > 0) { 
@Query("SELECT COUNT(*) > 0 FROM Users")
boolean anyExists();
spring.jpa.properties.javax.persistence.validation.mode=none