hibernate - JSR-303 依赖注入(inject)和 Hibernate

标签 hibernate spring dependency-injection validation bean-validation

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

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

@PersistenceContext
private EntityManager entityManager;

我已经配置了应用程序上下文:

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

根据 Spring 文档,这应该允许“自定义 ConstraintValidators 像任何其他 Spring bean 一样从依赖注入(inject)中受益”

在调试器中,我可以看到 Spring 调用 getBean 来创建 ConstraintValidator。稍后,当刷新触发 preInsert 时,将创建并调用不同的 ConstraintValidator。问题是 EntityManager 在这个新的 ConstraintValidator 中为空。我尝试在 ConstraintValidator 中注入(inject)其他依赖项,但这些依赖项始终为空。

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

最佳答案

在 EntityManager 中注入(inject) 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"/>

享受吧!

关于hibernate - JSR-303 依赖注入(inject)和 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712345/

相关文章:

jakarta-ee - JEE6 : What can be injected with @Resource?

java - 没有使用 JPQL join fetch 的 Hibernate session

java - 何时在 Spring MVC 中为 Controller 使用请求范围的 beans 而不是单例 beans

c# - ASP.NET MVC 2 中的基本 Controller 实现

java - Hibernate:是否可以只保留一个 child ,这也会导致 parent 的坚持

java - 处理 Spring 集成文件的预期返回

c# - 注入(inject)和 WebAPI : Getting started after install from NuGet

java - org.h2.jdbc.JdbcSQL异常 : Schema "MYAPP" not found; SQL statement

java - Hibernate 搜索查询?

hibernate - 命名查询中的 hibernate 设置参数