Đang cập nhật câu trả lời của tôi:
- Bạn muốn phương thức "lưu Báo giá công khai (Trích dẫn trích dẫn)" của mình để được giao dịch.
- khi phương thức này được gọi ... giao dịch bắt đầu trong TransactionInterceptor và từ proxy "lưu Trích dẫn công cộng (Trích dẫn trích dẫn)" được gọi ra
- Dòng "quoteLineDao.delete (new Long (44));" hoạt động tốt
- Dòng "System.out.println (" °. hoạt động tốt
- Dòng "quoteDao.save (quote);" đưa ra ngoại lệ vi phạm ràng buộc. Giao dịch được đánh dấu là khôi phục
- bạn đang nắm bắt ngoại lệ này và sử dụng nó và không truyền bá ngoại lệ
- phương thức "public Quote save (Quote quote)" sẽ trả về null vì dòng "return null;"
- Giờ đây, mã tiếp cận bộ đánh chặn giao dịch và vì không có ngoại lệ nào ở bộ đánh chặn này, nó cố gắng thực hiện nhưng giao dịch đã được đánh dấu là khôi phục và do đó không thành công.
Giải pháp:- Bạn không được sử dụng ngoại lệ và thay vào đó tuyên truyền ngoại lệ vì nhu cầu giao dịch của bạn.
Thay đổi thành sau đây. đã thêm câu lệnh ném.
try{
quoteLineDao.delete(new Long(44));
System.out.println("°°°°°°°°°°°°°°°°°°Line 44 deleted");
return quoteDao.save(quote);
} catch(Exception e){
Logger.getLogger(QuoteService.class).log(Logger.Level.ERROR, e);
throw e;
}
Giải thích từng bước có sẵn trong liên kết này: Không thể thực hiện giao dịch JPA:Giao dịch được đánh dấu là rollbackOnly