Пользовательский ConstraintValidator называется дважды [дубликат]

Принимая int в качестве входа в python: мы берем простой строковый ввод, используя:

input()

теперь мы хотим int как input.so мы выводим эту строку в int. просто используя:

int(input())
7
задан F Sohail 25 July 2014 в 13:26
поделиться

1 ответ

Возможно, вторая проверка выполняется спящим при отправке вашего компонента в хранилище данных. Чтобы отключить это, добавьте это в свой persistence.xml:

<property name="javax.persistence.validation.mode" value="none"/>

https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/configuration.html говорит:

По умолчанию активирована проверка бина (и валидатор гибернации). Когда объект создается, обновляется (и, возможно, удаляется), он проверяется перед отправкой в ​​базу данных. Схема базы данных, сгенерированная Hibernate, также отражает ограничения, объявленные в сущности.

Вы можете точно настроить это, если необходимо:

AUTO: если проверка бина присутствует в пути к классам, активируются CALLBACK и DDL.

CALLBACK: сущности проверяются при создании, обновлении и удалении. Если поставщик Bean Validation не присутствует, во время инициализации возникает исключение.

DDL: (не стандартные, см. ниже) схемы базы данных - это объекты, которые проверяются при создании, обновлении и удалении. Если поставщик Bean Validation не присутствует, во время инициализации возникает исключение.

NONE: Валидация бинов вообще не используется

Первый, очевидно, выполняется вашим контроллером Spring из-за аннотации @Valid.

6
ответ дан Marek Raszewski 22 August 2018 в 19:54
поделиться
  • 1
    Удивительно, спасибо, что я исправил свою проблему. Просто из любопытства, знаете ли вы, почему во время второго вызова userRepository был нулевым, хотя я установил его как Autowired? Это потому, что валидатор был вызван вне контекста Spring? Как бы вы посоветовали мне это исправить? – F Sohail 25 July 2014 в 16:50
  • 2
    Вы, вероятно, правы: вы вне контекста Весны. Однако, на мой взгляд, я не думаю, что это хорошая идея, чтобы делать ЛЮБЫЕ операции настойчивости во время проверки привязки компонента. Вы должны спросить у некоторых более опытных пользователей, хорошо это или нет. В моем понимании это делается только для проверки таких вещей, как нули, формат размеров, орфография, возможно, некоторые контрольные суммы, а не логика приложения. Но это только мое чувство. Подумайте также о тестах junit, управлении транзакциями и других проблемах, которые наверняка у вас будут с таким дизайном. – Marek Raszewski 25 July 2014 в 19:12
  • 3
    @MarekRaszewski, как бы вы получили сообщения Hibernate в BindingResult? – Al Grant 8 September 2017 в 19:07
Другие вопросы по тегам:

Похожие вопросы: