我正在尝试注入一个eventRepository,它是我项目中的Spring Data Repository:
public class App {
protected static EntityManagerFactory factory;
@Autowired
protected EventRepository eventRepository;
public void execute() {
Event foo = eventRepository.findBySlug("abraxas");
}
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
App runner = (App) context.getBean("AppBean");
runner.execute();
}
}
的beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<bean id="AppBean" class="org.app.App"></bean>
<jpa:repositories base-package="org.app.repository" />
</beans>
但是当我运行它时,我得到以下异常:
java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation. at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators
在一些评论中,我发现我需要“配置HibernateExceptionTranslator
”,但我没有设法找出方法。
我正在尝试关注official documentation,但未提及HibernateExceptionTranslator
的配置。
由于
答案 0 :(得分:4)
显然解决方案是添加
<bean class="org.springframework.orm.hibernate4.HibernateExceptionTranslator"/>
到beans.xml
感谢JB Nizet找到解决方案。
答案 1 :(得分:1)
使用Java Config:
@Bean
public HibernateExceptionTranslator hibernateExceptionTranslator() {
return new HibernateExceptionTranslator();
}
如果使用Hibernate 3,则使用此导入:
import org.springframework.orm.hibernate3.HibernateExceptionTranslator;
或者如果使用Hibernate 4:
import org.springframework.orm.hibernate4.HibernateExceptionTranslator;
答案 2 :(得分:0)
根本原因是Java.lang.IllegalStateException
,它不是hibernateException
的子类,春天的HibernateExceptionTranslator
可以将您的例外转换为DataAccessException(Runtime Exception)
。
因此,不是HibernateExceptionTranslator
在配置文件中添加org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor
或applicationC0ntext-*.xml
。然后在@Repository
或配置文件中使用适当的组件扫描在持久性文件中标记applicationC0ntext-*.xml
注释。