我正在使用 Spring-Data 并希望将PersistenceExceptions
其翻译为 Springs DataAccessExceptions
。
我用它激活了 Spring-Data,@EnableJpaRepositories
我可以看到,它org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0
是在启动期间由 Spring 加载的。APersistenceExceptionTranslator
也可以。
据我了解的文档命名空间声明<jpa:repositories>
激活 Beans 注释的持久性异常翻译@Repository
。Java配置(@EnableJpaRepositories
)也是这种情况吗?
这是否意味着,我必须@Repository
使用上面提到的配置的 Spring Data 来注释我的 Spring-Data 存储库接口,或者它是可选的?
这是界面:
@Repository
public interface DemoDao extends JpaRepository<Demo, Long> {}
这是测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestDaoWithEmbeddedDatabaseConfiguration.class})
@Transactional
public class DemoTest {
@Test(expected = DataAccessException.class)
public void testFindByTransactionStatus() throws Exception {
persistDemoDataWithUniqueConstraintError(); // this calls DemoDao#save()
}
}
这会产生:
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException
我不知道如何启用异常翻译。有任何想法吗?
编辑1:
这是测试配置和 Spring 设置:
@Configuration
@ComponentScan("com.demo.dao")
@EnableJpaRepositories("com.demo.dao")
@EnableTransactionManagement
public class TestDaoWithEmbeddedDatabaseConfiguration {
// DataSource (EmbeddedDatabaseBuilder), EntityManagerFactory @Bean configuration
@Bean
public PersistenceExceptionTranslator persistenceExceptionTranslator() {
return new HibernateExceptionTranslator();
}
}