Sto avendo la cosa più strana che accade e non riesco a capire perché. Il modo migliore per descrivere questo è quello di fornire un esempio semplicistico:L'eccezione si propaga dopo essere stato catturato
@Service
@Transactional
public class Foo{
public ModelAndView delete(@ModelAttribute("abc") Long id) {
ModelAndView mav = new ModelAndView();
try {
getDaoService().delete(id); //Calls Bar.delete()
} catch (final Exception e) {
// Add a custom error message to the mav for the user to see
mav.getModelMap().addAttribute(blah, blah);
}
return mav;
}
}
@Service
@Transactional
public class Bar {
public void delete(final E entity) throws HibernateException {
if (null != entity) {
try {
sessionFactory.getCurrentSession().delete(entity);
} finally {
sessionFactory.getCurrentSession().flush();
}
}
}
}
In questo caso particolare, sto cercando di eliminare un oggetto che ha una violazione di vincolo (ORA-02.292). Mi aspetto che l'eliminazione fallisca a causa di questo. Quando l'eliminazione fallisce, desidero mostrare all'utente un messaggio personalizzato appropriato.
Invece di essere in grado di mostrare all'utente un messaggio personalizzato, la chiamata non riesce e visualizza il seguente sullo schermo:
org.springframework.transaction.UnexpectedRollbackException: Transaction rotolato indietro perché è stato contrassegnato come solo rollback
Quando utilizzo un debugger, è possibile verificare che l'errore sia stato rilevato correttamente e che l'oggetto ModelAndView abbia il messaggio personalizzato al suo interno. Quindi, non ho idea del perché venga lanciata un'eccezione dopo che è stata catturata e gestita. Qualcuno ha idea del perché questo sta accadendo?
Impressionante, ha funzionato come un fascino! Grazie!!! – user973479