Я использую Spring-Data и хочу, чтобы PersistenceExceptions
был переведен в Springs DataAccessExceptions
.Как включить перевод исключений в Spring-Data при запуске теста?
Я активировал Spring-Data с помощью @EnableJpaRepositories
, и я вижу, что org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0
загружен Spring во время запуска. A PersistenceExceptionTranslator
также доступен.
Как я понимаю documentation Декларация пространства имен <jpa:repositories>
активирует трансляцию исключительных ситуаций для Beans, аннотированную @Repository
. Это также относится к конфигурации Java (@EnableJpaRepositories
)?
Означает ли это, что я должен аннотировать мой интерфейс репозитория Spring-Data с помощью @Repository
или он является необязательным с использованием данных Spring, как это было указано выше?
Это интерфейс:
@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
Я не могу понять, как включить перевод исключения. Есть идеи?
Edit 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();
}
}
Это должно работать, как вы ожидаете.Вы можете добавить контент конфигурации? –
@OliverGierke Я добавил конфигурацию, но оставил определения Bean для Entitymanager и встроенного источника данных DB. Если необходимо, сообщите мне. Спасибо за помощь. – timomeinen
У меня такая же проблема. Вы нашли решение? – mejas