- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Spring-Data 并希望让 PersistenceExceptions
翻译成斯普林斯 DataAccessExceptions
.
我用 @EnableJpaRepositories
激活了 Spring-Data我可以看到,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0
在启动期间由 Spring 加载。一个 PersistenceExceptionTranslator
也可用。
据我了解documentation命名空间声明 <jpa:repositories>
激活注解为 @Repository
的 Bean 的持久性异常转换. Java 配置 ( @EnableJpaRepositories
) 也是这种情况吗?
这是否意味着,我必须用 @Repository
注释我的 Spring-Data 存储库接口(interface)还是使用如上所述配置的 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
@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();
}
}
最佳答案
我发现持久性异常翻译是默认的,使用 Spring 4.1.5.RELEASE 和 Spring Data JPA 1.7.2.RELEASE。
根据 PersistenceExceptionTranslationPostProcessor文档:
All of Spring's applicable resource factories (e.g. LocalContainerEntityManagerFactoryBean) implement the PersistenceExceptionTranslator interface out of the box.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="emfb", ...)
@ComponentScan(...)
public class TestConfig {
@Bean public LocalContainerEntityManagerFactoryBean emfb() { ... }
...
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestConfig.class})
public class MyTest {
...
@Test public void expectFKViolation() { ... }
...
}
Tests in error: expectFKViolation(...): ...; nested exception is org.hibernate.PropertyValueException
org.hibernate.PropertyValueException
的测试输出:
o.s.t.c.s.DirtiesContextTestExecutionListener - After test method:
context [ ..., testException = org.springframework.dao.DataIntegrityViolationException:
not-null ...; nested exception is org.hibernate.PropertyValueException ... ]
@Test(expected="org.springframework.dao.DataIntegrityViolationException.class")
public void expectFKViolation() { ... }
关于spring-data - 从测试运行时如何在 Spring-Data 中启用异常翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18014568/
我是一名优秀的程序员,十分优秀!