Tôi đang có điều kỳ lạ xảy ra và tôi không thể hiểu tại sao. Cách tốt nhất để mô tả này là cung cấp một ví dụ đơn giản:Các trường hợp ngoại lệ được phát hiện sau khi đã bị bắt
@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();
}
}
}
}
Trong trường hợp đặc biệt này, tôi đang cố gắng để xóa một đối tượng trong đó có một vi phạm chế (ORA-02.292). Tôi hy vọng xóa để thất bại vì điều này. Khi xóa không thành công, tôi muốn hiển thị cho người dùng một thông báo tùy chỉnh thích hợp.
Thay vì có thể hiển thị cho người dùng một thông báo tùy chỉnh, cuộc gọi bị lỗi và hiển thị sau để màn hình:
org.springframework.transaction.UnexpectedRollbackException: Giao dịch cuộn lại bởi vì nó đã được đánh dấu dưới dạng rollback-only
Khi tôi sử dụng trình gỡ lỗi, tôi có thể thấy lỗi bị bắt và đối tượng ModelAndView có thông điệp tùy chỉnh bên trong. Vì vậy, tôi không có đầu mối tại sao một ngoại lệ vẫn còn bị ném sau khi nó đã bị bắt và xử lý. Có ai có cái nhìn sâu sắc về lý do tại sao điều này đang xảy ra?
Tuyệt vời, làm việc như một sự quyến rũ! Cảm ơn!!! – user973479