【发布时间】:2011-09-29 12:51:53
【问题描述】:
我在我的应用程序上下文中将基于弹簧的验证与通过以下启用的休眠验证器结合使用:
<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"/>
我已经实现了一个自定义验证器,它访问数据库以使用 spring 注入的 DAO 检查特定对象的有效性约束。这会导致 java.lang.StackOverflowError,因为每次从验证器中从数据库加载对象时都会调用验证,从而导致无限循环。为了解决这个问题,我尝试在我的实体管理器上设置刷新模式,以使用以下代码从验证器中提交:
entityManager.setFlushMode(FlushModeType.COMMIT);
这会导致 hibernate 的“collection not process by flush()”异常。
是否有从自定义验证器中访问数据库的最佳实践示例,可以让我解决这两个问题?
【问题讨论】:
-
类似问题:stackoverflow.com/questions/8375704/… IMHP Spring 方式是将
@Autowired服务或DAO 类提供给验证器并照常使用它们。
标签: java spring validation bean-validation