ConstraintValidator с запросом к базе данныхJAVA

Программисты JAVA общаются здесь
Anonymous
ConstraintValidator с запросом к базе данных

Сообщение Anonymous »

У меня есть сложное ограничение для одного из моих объектов, которое я не могу выразить через ограничение базы данных. Поэтому я хочу добавить его в качестве проверки в процессе сохранения спящего режима. Я пытаюсь сделать это через валидатор ограничений, которому необходим доступ к базе данных.

Код: Выделить всё


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;
}
}

Пока все хорошо, но возникает ошибка Stackoverflow — из-за вызова репозитория. Почему запрос в репозитории вызывает еще один вызов проверки? Я видел примеры, подобные этому. Недопустимо ли запрашивать базу данных после проверки? Если да, то как подойти к такому делу?

Подробнее здесь: https://stackoverflow.com/questions/788 ... o-database

Вернуться в «JAVA»