我正在维护传统的Spring FW 2.5应用程序。最近我尝试将其移至Spring FW 4.2。我无法真正带回的其中一个因素是春季异常翻译。具体情况是(简化代码):
public boolean exists() {
try {
Query q = em.createNativeQuery();
q.getSingleResult();
return true;
} catch(EmptyResultDataAccessException ex) {
return false;
} catch(Exception e) {
throw new CustomCheckedException(e);
}
}
迁移后,尝试阻止似乎是抛出javax.persistence.NoResultException
(因为基础技术是JPA)而不是之前的org.springframework.dao.EmptyResultDataAccessException
。我无法让Spring翻译这个特殊的异常。我已使用@Repository
注释了此特定dao,在XML中启用了component-scan
以及PersistenceExceptionTranslationPostProcessor
。我还有什么可能遗失的?
该应用程序非常复杂,包含许多组件,因此发布配置(多个XML文件)可能只会引起混淆。如果有人能告诉我如何为这个特定区域制作春季日志DEBUG消息,那将是很棒的。我可能会自己解决这个问题,或者至少提供更多细节。
编辑: DAO注释了@Transactional(readOnly = true)
,导致exists()
方法在事务中运行。这可能是相关的,因为我认为异常翻译最有可能在Spring 2.5中工作,这要归功于声明性事务。迁移到4.2之后添加了所有@Repository
,component-scan
和PersistenceExceptionTranslationPostProcessor
内容,以恢复异常转换。