As Zach said, you can use a custom constraint.
Using the Hibernate Validator, you can alternatively work with @ScriptAssert , which allows you to define restrictions using any JSR 223-compatible scripting engine:
@ScriptAssert(lang = "javascript", script = "_this.minimumAge < _this.maximumAge") public class MyBean { @Min(1) private int minimumAge; @Max(99) private int maximumAge; }
If you really need to declare constraints in a dynamic way, you can use the Hibernate Validator API to define software constraints:
int dynamicallyCalculatedConstraintValue = ...; ConstraintMapping mapping = new ConstraintMapping(); mapping.type( MyBean.class ) .property( "mininumAge", FIELD ) .constraint( new MaxDef().value( dynamicallyCalculatedConstraintValue ) ); HibernateValidatorConfiguration config = Validation.byProvider( HibernateValidator.class ).configure(); config.addMapping( mapping ); Validator validator = config.buildValidatorFactory().getValidator();
source share