【问题标题】:No persistence exception translators found in bean factory. Cannot perform exception translation在 bean 工厂中找不到持久性异常翻译器。无法执行异常翻译
【发布时间】:2012-01-16 02:37:19
【问题描述】:

在使用 Hibernate 4.0.0 CR7 迁移到 Spring Framework 3.1.0 RC1 后出现以下异常

2011-12-08/11:48:38.425/EST [Thread-17] 错误上下文初始化失败 org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/applicationContext-hibernate.xml] 中定义名称为“org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0”的 bean 创建错误:bean 初始化失败;嵌套异常是 java.lang.IllegalStateException:在 bean 工厂中找不到持久性异常转换器。无法执行异常翻译。 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:530) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:459) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:728) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:449) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) 在 org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) 在 org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) 在 java.util.concurrent.FutureTask$Sync.innerRun(未知来源) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 原因:java.lang.IllegalStateException:在 bean 工厂中找不到持久性异常转换器。无法执行异常翻译。 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:142) 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.(PersistenceExceptionTranslationInterceptor.java:79) 在 org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.(PersistenceExceptionTranslationAdvisor.java:70) 在 org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:103) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1465) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1433) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) ... 18 更多

【问题讨论】:

  • PersistenceExceptionTranslationPostProcessor 是否需要定义任何其他 bean。我以前从未使用过它,但我猜这就是导致您的错误的原因。
  • 看起来,你需要在bean配置中定义PersistenceExceptionTranslator的派生词之一。

标签: java hibernate migration spring-3


【解决方案1】:

并使用新的 spring java 配置:

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator(){ 
      return new HibernateExceptionTranslator(); 
    }

【讨论】:

    【解决方案2】:

    正如 skravin 所说,您必须配置一个HibernateExceptionTranslator。 Hibernate 3 的 LocalSessionFactoryBean 实现了 PersistenceExceptionTranslator,但 Hibernate 4 没有实现。

    【讨论】:

    • “配置HibernateExceptionTranslator”是什么意思?我关注了这个文档static.springsource.org/spring-data/data-jpa/docs/current/…,它没有提到它?谢谢。
    • 只需在你的 spring 上下文 XML 文件中声明一个这种类型的 bean。
    • 但究竟如何? 显然不起作用。我想知道为什么它没有在官方教程中记录。谢谢
    • 太棒了, id="someId" 显然甚至没有必要。谢谢!
    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多