2016-06-28 2 views
1

Можно ли отключить определенные ограничения/аннотации для каждого класса во время выполнения? Например, если бы я хотел повернуть отметку @NotNull на поле firstName, возможно ли это?Динамически отключать аннотации проверки гибернации во время выполнения?

Это проведет тестирование, чтобы выяснить, правильно ли запущено определенное ограничение, поскольку я могу отключить все остальные ограничения и просто проверить это ограничение.

ответ

1

Можно ли отключить определенные ограничения/аннотации для каждого класса во время выполнения? Например, если бы я хотел включить проверку @NotNull в поле firstName , возможно ли это?

Нет, это не так. Проверка боба не определяет такую ​​функцию. В Hibernate Validator HV-98 есть открытая проблема, в которой обсуждается возможность перезагрузки метаданных, но даже там вам потребуется перестроить фабрику валидаторов.

Вы можете переопределить аннотации через конфигурацию XML, а затем воссоздать экземпляр Validator(Factory) с использованием различных конфигураций в то время, но это, вероятно, нелегко.

Это позволит сделать тестирование, чтобы увидеть определенное ограничение, является ли срабатывает правильно проще, так как я мог отключить все другие ограничения, и просто проверить, что одно ограничение.

Если речь идет о тестировании, вы можете использовать Validator.validateValue, чтобы просто подтвердить данное поле. Кроме этого, если вы проверите весь граф объектов и получите набор нарушений ограничений, вы можете просто перебрать их и проверить метаданные. В метаданных достаточно информации, чтобы убедиться, что определенные ограничения выполнялись и не выполнялись.

+0

Perfect - Validator.validateValue - именно то, что я искал. Благодарю. – Ole

0

Аннотации проверки гибернации обычно используются вместе с ограничениями базы данных, поэтому нет смысла изменять поведение во время выполнения. Однако, если вы хотите это сделать, вы можете реализовать свои собственные валидаторы (переопределяя существующие) и делать все, что хотите.

+0

Предположим, что сам реализую аннотацию - как отключить ее во время выполнения? – Ole

+0

Если вы хотите, чтобы только одно поле проверялось, вам нужно создать что-то вроде белого списка и проверить имя поля внутри вашего валидатора на этот контрольный список. Белый список может быть реализован как Singleton. Получение имени поля внутри валидатора не так просто, в худшем случае вы можете использовать объект полезной нагрузки для передачи имени поля в валидатор. –

+0

OK - Спасибо, я подумал, что это будет нетривиальное упражнение. Вероятно, я просто добавлю аннотации проверки к минимуму и проведу проверку уровня на уровне за пределами hibernate. – Ole

Смежные вопросы