我使用基於彈簧的驗證與在我的應用程序環境下啓用Hibernate驗證組合:數據庫訪問
<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);
這將導致「被刷新集合無法處理()」從休眠狀態中的異常。
是否有一個從自定義驗證程序中訪問數據庫的最佳實踐示例,這將允許我解決這兩個問題?
類似的問題:http://stackoverflow.com/questions/8375704/make-custom-hibernate-validation-annotation-for-電子郵件存在IMHP春天的方式是'@ Autowired'服務或DAO類的驗證和通常使用它們。 –