@TelephoneNumber
次のように、注釈を検証するためのカスタム ConstraintValidator があります。
@Component
public class TelephoneNumberValidator implements ConstraintValidator<TelephoneNumber, String> {
@Autowired
ValidationHelper validationHelper;
@Override
public void initialize(TelephoneNumber telephoneNumber) { }
@Override
public boolean isValid(String telephoneNumber, ConstraintValidatorContext cxt) {
if(telephoneNumber == null) {
return true;
} else {
return validationHelper.isTelephoneNumber(telephoneNumber);
}
}
}
ご覧のとおり、 としてマークされている ValidationHelper オブジェクトを自動配線します@Component
。
私@Repository
のオブジェクトを永続化するたびにsessionFactory.getCurrentSession().persist(myobject);
、NPEをvalidationHelper
nullとして取得します。
私の休止状態の構成は次のとおりです。
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages="uk.co.domain.repositories")
public class HibernateConfig {
static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
static final String URL = "jdbc:mysql://localhost:3306/mydatabase";
static final String USERNAME = "user";
static final String PASSWORD = "pass";
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new org.apache.commons.dbcp2.BasicDataSource();
dataSource.setDriverClassName(DRIVER_CLASS);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setUrl(URL);
dataSource.setInitialSize(10);
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "uk.co.domain.models" });
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory().getObject());
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
}
LocalValidatorFactoryBean
次のように構成しました。
@Configuration
@ComponentScan(basePackages="uk.co.domain.validators")
public class ValidatorConfig {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
return localValidatorFactoryBean;
}
}
ただし、これで問題は解決していません。MVC フォームの検証はまったく問題なく機能します。失敗するのは Hibernate の永続化操作だけです。
このバリデーターを使用するように Hibernate に指示する必要がありますか? ポインタをいただければ幸いです。