Почему @DecimalMin создает исключение ConstraintViolationException? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть класс модели JPA, который работал так, как я ожидал.Несколько недель назад он начал выдавать ошибки и не смог сохраниться.

javax.persistence.RollbackException: 
  javax.validation.ConstraintViolationException: 
    One or more Bean Validation constraints were 
    violated while executing Automatic Bean Validation
    on callback event: preUpdate

Я извлек ConstraintViolation, который гласил:

must be greater or equal 0.01

Это привело меня к единственному атрибуту, отмеченному как@DecimalMin в моей модели:

@Column(nullable = false, precision = 36, scale = 2)
@DecimalMin("0.01")
@NonNull
private BigDecimal amount;

Пока это звучит разумно, но странно то, что исключение возникает всегда, независимо от значения amount.Я попробовал это с amount из 1.00 и все еще получил исключение.

Единственный другой ключ, который у меня есть, находится в базе данных, где 0.00 было сохранено как последнее значение для amount.Я не знаю, как это было возможно, и имеет ли это отношение к моей проблеме.


Редактировать

В комментариях к этим вопросам возникла необходимость для меняпрояснить окружающую среду.База данных развернута на стороне клиентов, но он не имеет к ней доступа.Схема является эксклюзивной для приложения, а учетные данные зашифрованы.Поэтому никто, кроме приложения, не должен был иметь доступ к базе данных.

Само приложение делится на модуль API и модуль UI .Оба используют один и тот же модуль core для доступа к базе данных.Модель также является частью основного модуля и используется двумя другими модулями.API развернут на сервере и позволяет строго ограничить доступ только к нескольким операциям.Он используется только для интеграции других приложений.Пользовательский интерфейс установлен на клиентском компьютере и предоставляет доступ к дополнительным функциям.

Количество 0.00 в базе данных, полученное из приложения пользовательского интерфейса.С этого момента любая попытка использовать ту же операцию через API не удалась, в то время как приложение пользовательского интерфейса все еще работает, как и ожидалось.

Все модули версионированы и собраны вместе в одном процессе сборки, и я гарантировал, что все версиина всех клиентов одинаковы.

...