Похоже, что в JPA2 механизм проверки поставщика постоянства включается по умолчанию при предварительном сохранении, предварительном обновлении и т. Д.
Он использует собственный механизм для создания валидаторов, Spring не вмешивается.
Единственное решение, которое я вижу на данный момент, это отключение стандартной проверки JPA2 в файле persistence.xml:
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.show_sql" value="true"/>
<!-- other props -->
</properties>
<validation-mode>NONE</validation-mode>
</persistence-unit>
Затем используйте SpringValidatiorFactoryBean, как обычно. Затем вам придется вызывать валидаторы вручную, как в мире до JPA2.
UPDATE:
Чтобы завершить его, другим решением было бы указать constraint-validator-factory
в META-INF / validation.xml.
Было бы очень хорошо, если бы это мог быть SpringConstraintValidatorFactory
Spring, но, к сожалению, для его передачи в конструктор требуется AutowireCapableBeanFactory
, но JPA2 ожидает здесь класс с конструктором без аргументов.
Что оставляет возможность создания собственной реализации ConstraintValidatorFactory
, которая вытаскивает валидаторы из Spring, но я не вижу никакого чистого способа сделать это.