Я не знаю, существует ли простой способ настроить валидатор для агрегирования нарушений ограничений как из аннотации, так и из конфигурации XML, когда первый или оба не удаются.
Как показывает ваш код Hibernate Validator может работать со смешанными аннотациями и XML конфигурациями, но отсутствие документации для этого конкретного случая c указывает на то, что по крайней мере это не рекомендуется.
Когда XML конфигурация Файл используется, он имеет приоритет над аннотациями по умолчанию. ignore-annotations используется для преодоления этого (выделение текста - мое):
Установка ignore-annotations
в значение true означает, что аннотации ограничений, помещенные в сконфигурированный компонент, игнорируются. Значением по умолчанию для этого значения является true . ignore-annotations
также доступно для узлов class
, fields
, getter
, constructor
, method
, parameter
, cross-parameter
и return-value
. Если не указано явно на этих уровнях, сконфигурированное значение компонента применяется .
Использование Hibernate Validator для удовлетворения ваших потребностей в валидации В статье говорится, что:
Значением по умолчанию для поля является ignore-annotations=”false”
. Это означает, что по умолчанию аннотации для поля сильнее (это, конечно, после того, как вы указали, что этот компонент не будет игнорировать аннотации). Если вы хотите, чтобы XML был сильнее, чем вы должны указать, то ignore-annotations=”true”
Кажется возможным отключить настройку аннотации для указанного поля c, настроенного в XML.
Другим решением для переключения между аннотацией и XML является использование Ограничения группировки .
Я не уверен, что что-либо из перечисленного выше использовать для вас, но если это возможно, я бы, вероятно, переключился бы на одну конфигурацию (XML, предполагая, что конфигурация аннотации происходит из внешней библиотеки, которую вы не можете изменить), и использовал бы ее везде, вместо того, чтобы полагаться на недокументированные функции.