Код: Выделить всё
public class UniqueTimePeriodValidator implements ConstraintValidator {
private UniqueTimePeriodConstraint annotation;
@Autowired
private BookingRepository repository;
@Override
public void initialize(UniqueTimePeriodConstraint annotation) {
this.annotation = annotation;
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (!(value instanceof BookingRepository)) {
throw new IllegalStateException("UniqueTimePeriodValidator works on Booking only");
}
Booking booking = (Booking) value;
List conflicts = repository.findAllByRoomAndEndGreaterThanAndStartLessThan(booking.getRoom(), booking.getStart(), booking.getEnd());
if(conflicts.size() > 1 || conflicts.get(0).getId().equals(booking.getId())) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(annotation.message())
.addBeanNode()
.addConstraintViolation();
}
return true;
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... o-database