你好,我想在 ConstraintValidator 中注入(inject) 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
在这个类中,我尝试注入(inject) 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。
最佳答案
您使用其构造函数 (new UniqueKeyValidator()
) 创建了 UniqueKeyValidator
,而不是将其注入(inject)(使用 Spring DI)到您的测试类中。
CoreConfiguration 无论如何都不包含此 validator ,因此 Spring 可能根本不会扫描它。所有 @Component
类也必须有一个 component:scan
。
关于java - 在 ConstraintValidator 中注入(inject) EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647940/