Witam.
Ponieważ Spring JDBC wyrzuca bląd EmptyResultDataAccessException dla queryForObject a ja wole wyrzucać swój błąd NotFoundException postanowiłem że zrobie Aspekt który to będzie przechwytywał:
@Component
@Aspect
public class EmptyResultDataAccessExceptionAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@AfterThrowing(value =" @within(...)",throwing="e")
public void emptyResultDataAccessExceptionHandle(EmptyResultDataAccessException e) throws NotFoundException{
logger.error("Aspect intercept exception",e);
throw new NotFoundException(e);
}
}
Tutaj mam metodę która może wyrzucić taki wyjątek:
@Override
public Category readById(Integer id) {
String sql = " SELECT id,category FROM category WHERE id=?";
return jdbcTemplate.queryForObject(sql, rowMapper,id);
}
W warstawie DAO korzystam z adnotacji do oznaczenia odpowiednich klas. Teraz pytanie jakie się nasuwa czy jeśli metoda ta będzie uruchomiona w klasie serwisowej w metodzie która działa w transakcji (tzn. z propagacją REQUIRED) to gdy ten Aspect przechwyci wyjątek Springowy i wyrzuci napisany przeze mnie to transakcja zrobi rollback?