一尘不染

JSR-303injection and Hibernate

spring

Spring 3.0.2,Hibernate 3.5.0,Hibernate-Validator 4.0.2.GA

我正在尝试使用以下方法将Spring依赖项注入ConstraintValidator中:

@PersistenceContext
private EntityManager entityManager;

我已经使用以下方式配置了应用程序上下文:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

根据Spring文档,它应该允许“自定义ConstraintValidators像其他任何Spring bean一样受益于依赖项注入”

在调试器中,我可以看到Spring调用getBean创建ConstraintValidator。稍后,当刷新触发preInsert时,将创建并调用另一个ConstraintValidator。问题在于此新ConstraintValidator中的EntityManager为null。我尝试在ConstraintValidator中注入其他依赖项,这些依赖项始终为null。

有谁知道是否可以将依赖项注入ConstraintValidator?


阅读 299

收藏
2020-04-20

共1个答案

一尘不染

在EntityManager中注入Spring上下文感知的ValidatorFactory的最佳方法是使用javax.persistence.validation.factory属性。配置如下:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
 <property name="dataSource" ref="dataSource" />
 <property name="jpaVendorAdapter">
  <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
   <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />              
  </bean>
 </property>
 <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"/>
2020-04-20