How to inject spring bean into Validator(hibernate)

3.5k views Asked by At

spring doc

I have read the following spring documentation:

By default, the LocalValidatorFactoryBean configures a SpringConstraintValidatorFactory that uses Spring to create ConstraintValidator instances. This allows your custom ConstraintValidators to benefit from dependency injection like any other Spring bean.

I have wrote custom validator:

public class FieldMatchValidator implements ConstraintValidator<FieldMatch, Object>{
    @Autowired
    MyBeanDao dao;
    ...
}

But in debug I see that dao is null.

Please, explain I didn't understand documentation or I wrong configured something?

1

There are 1 answers

1
rgrebski On

Use Spring Validator, it also implements Bean Validation API.

See 7.8.2 Configuring a Bean Validation Provider:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

You can also use it for method validations, see "Spring-driven Method Validation" section in the documentation above.

[UPDATE1]

If you want hibernate to validate on persist you need to set jpa property javax.persistence.validation.factory in your enityManagerFactory:

            <property name="jpaPropertyMap">
              <map>
                <entry key="javax.persistence.validation.factory" value-ref="validatorFactory" />
              </map>
            </property>

You may also need to set validation groups for events, see: http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-checkconstraints.html#validator-checkconstraints-orm-hibernateevent