Я могу придумать несколько вещей, которые стоит попробовать.
Вы можете создать Ограничение
с целью самого типа с соответствующим валидатором:
@ValidateDateRange(start="startDate", end="endDate")
public class MyBean {
Вы можете инкапсулировать диапазон дат в тип и убедитесь, что:
public class DateRange {
private long start;
private long end;
public void setStart(Date start) {
this.start = start.getTime();
}
// etc.
Вы можете добавить простое свойство, выполняющее проверку:
public class MyBean {
private Date startDate;
private Date endDate;
@AssertTrue public boolean isValidRange() {
// TODO: null checks
return endDate.compareTo(startDate) >= 0;
}
Поскольку нет способа получить доступ к компоненту в валидаторе JSR 303, это невозможно.
Временным решением было бы предоставить свой собственный ConstraintValidatorContext
и расширить это со ссылкой на bean-компонент, который вы в настоящее время проверяете. Но я не уверен, можно ли изменить / переопределить соответствующий завод.
Ответ - валидатор уровня класса. Вы можете определить собственные ограничения, которые вы можете поместить в класс сущности. Во время проверки вы передаете весь экземпляр в метод isValid (). Затем вы можете сравнить свои две даты друг с другом. См. Также документацию по Hibernate Validator .