Memperbarui jawaban saya:
- Anda ingin metode "penyimpanan Kutipan publik (kutipan Kutipan)" bersifat transaksional.
- ketika metode ini dipanggil ... transaksi dimulai di TransactionInterceptor dan dari proxy "penyimpanan Kutipan publik(Kutipan kutipan)" dipanggil
- Baris "quoteLineDao.delete(Baru Panjang(44));" berfungsi dengan baik
- Baris "System.out.println("°°°°°°°°°°°°°°°°°°Baris 44 dihapus");" berfungsi dengan baik
- Baris "quoteDao.save(quote);" memberikan pengecualian pelanggaran batasan. Transaksi ditandai sebagai rollback
- Anda menangkap pengecualian ini dan mengonsumsinya dan tidak menyebarkan pengecualian
- metode "penyimpanan Kutipan publik(Kutipan kutipan) " akan mengembalikan null karena baris "return null;"
- Sekarang kode mencapai pencegat transaksi dan karena tidak ada pengecualian pada pencegat ini, ia mencoba untuk melakukan tetapi transaksi sudah ditandai sebagai rollback dan karena itu gagal.
Solusi:- Anda tidak boleh menggunakan pengecualian dan sebaliknya menyebarkan pengecualian karena kebutuhan transaksional Anda.
Ubah menjadi berikut. telah menambahkan pernyataan lemparan.
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;
}
Penjelasan langkah demi langkah tersedia di tautan ini:Tidak dapat melakukan transaksi JPA:Transaksi ditandai sebagai rollbackOnly