Я использую пружинную валидацию в сочетании с валидатором гибернации, включенным следующим образом в контексте моего приложения:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
....
<property name="jpaPropertyMap">
<map>
<entry key="javax.persistence.validation.factory" value-ref="validator" />
</map>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Я реализовал пользовательский валидатор, который обращается к базе данных, чтобы проверить ограничения валидности дляконкретный объект с помощью пружины впрыскивается DAO.Это приводит к java.lang.StackOverflowError, поскольку кажется, что проверка вызывается каждый раз, когда объект загружается из базы данных изнутри валидатора, вызывая бесконечный цикл.Чтобы обойти это, я попытался установить режим сброса на моем менеджере сущностей для фиксации из валидатора со следующим кодом:
entityManager.setFlushMode(FlushModeType.COMMIT);
Это приводит к исключению "сбор не обработан с помощью flush ()"из спящего
Существует ли пример наилучшей практики доступа к базе данных из пользовательского валидатора, который позволит мне обойти обе эти проблемы?