【问题标题】:Inject EntityManager within ConstraintValidator在 ConstraintValidator 中注入 EntityManager
【发布时间】:2014-12-25 14:12:42
【问题描述】:

您好,我想在 ConstraintValidator

中注入 EntityManager

这是我的代码

核心配置

@Configuration
public class CoreConfiguration {

    @Bean
    public  MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator(validator());

        return methodValidationPostProcessor;
    }

    @Bean(name="validator")
    public static LocalValidatorFactoryBean validator() {
        LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();


        /* * ReloadableResourceBundleMessageSource messageSource = new
         * ReloadableResourceBundleMessageSource();
         * messageSource.setBasename("/WEB-INF/messages/validation");
         * localValidatorFactoryBean.setValidationMessageSource(messageSource);*/

        return localValidatorFactoryBean;
    }

}

UniqueKeyValidator.java

在这个类中我尝试注入EntityManager,但它总是给出null

@Component
public class UniqueKeyValidator implements
        ConstraintValidator<Unique, Serializable> {

    @PersistenceContext
    private EntityManager entityManager;

    private Class<?> entityClass;
    private String uniqueField;

    public void initialize(Unique unique) {
        entityClass = unique.entity();
        uniqueField = unique.property();
    }

    @Transactional
    public boolean isValid(Serializable property,
            ConstraintValidatorContext cvContext) {

        String query = String.format("from %s where %s = :val ",entityClass.getName(), uniqueField);
        List<?> list = entityManager.createQuery(query).setParameter("val", property).getResultList();

        return list != null && list.size() > 0;
    }


}

当我测试代码时,EntityManager 总是给出 null。

【问题讨论】:

    标签: java spring hibernate jpa spring-boot


    【解决方案1】:

    您使用其构造函数 (new UniqueKeyValidator()) 创建了 UniqueKeyValidator,而不是将其(使用 Spring DI)注入到您的测试类中。

    CoreConfiguration 无论如何都不包含这个验证器,所以 Spring 可能根本不扫描它。所有@Component 类也必须有一个component:scan

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 1970-01-01
      • 2012-05-24
      • 2013-06-09
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      相关资源
      最近更新 更多