在java配置中启用hibernate验证fail_fast

smi*_*tan 0 java validation spring hibernate

我正在使用 hibernate-validator 5.1.2.Final 和 Spring 4.0.6.RELEASE 并希望利用快速失败功能,以便当我配置具有多个约束的注释时,它们不会全部执行,而只会执行第一个错误消息被返回。

@MultipartFileNotEmpty
@CsvFile
@Documented
@Constraint(validatedBy = { })
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OrderCsv {

    String message() default "";

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

    Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)

通过查看Hibernate Validator文档,我似乎可以在全局级别启用fail_fast,但我不确定如何在 Java 配置中启用它。我当前的休眠配置如下所示:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages="uk.co.project")
public class HibernateConfig {

    final static String JDBC_URL = "jdbc:mysql://localhost:3306/";
    final static String DRIVER_CLASS = "com.mysql.jdbc.Driver";

    @Autowired
    private Environment environment;

    @Bean
    public DataSource dataSource() {

        BasicDataSource dataSource = new org.apache.commons.dbcp2.BasicDataSource();
        dataSource.setDriverClassName(DRIVER_CLASS);
        dataSource.setUsername(environment.getProperty("datasource.username"));
        dataSource.setPassword(environment.getProperty("datasource.password"));
        dataSource.setUrl(JDBC_URL + environment.getProperty("datasource.database"));
        dataSource.setInitialSize(10);

        return dataSource;
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory() {

        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "uk.co.project.models" });
        sessionFactory.setHibernateProperties(hibernateProperties());

        return sessionFactory;
    }

    @Bean
    public HibernateTransactionManager transactionManager() {

        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(sessionFactory().getObject());

        return txManager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {

        return new PersistenceExceptionTranslationPostProcessor();
    }

    Properties hibernateProperties() {
        return new Properties() {

            private static final long serialVersionUID = 1L;

            {
                setProperty("hibernate.hbm2ddl.auto", "validate");
                setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
                setProperty("hibernate.globally_quoted_identifiers", "true");
                setProperty("hibernate.show_sql", "true");
            }
        };
    }

}
Run Code Online (Sandbox Code Playgroud)

我尝试添加setProperty("hibernate.validator.fail_fast", "true");到我的hibernateProperties但没有成功。我将不胜感激任何关于如何在我的休眠java配置中启用fail_fast的指示。

bir*_*rya 6

“hibernate.validator.fail_fast”属性不是 sessionFactory 的属性,而是 ValidatorFactory 的属性,您可以尝试这样的操作:

@Bean
    public LocalValidatorFactoryBean getValidatorFactory() {
        LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
        localValidatorFactoryBean.getValidationPropertyMap().put("hibernate.validator.fail_fast", "true");
        return localValidatorFactoryBean;
    }
Run Code Online (Sandbox Code Playgroud)