FW从2.5升级到4.2后,Spring异常翻译无法正常工作

时间:2016-01-04 14:05:00

标签: java spring jpa exception-handling

我正在维护传统的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之后添加了所有@Repositorycomponent-scanPersistenceExceptionTranslationPostProcessor内容,以恢复异常转换。

0 个答案:

没有答案