0 امتیاز
قبل در برنامه نویسی توسط (186 امتیاز)
با سلام

در خط تولید wise از @Tranasctional  بالای متد ذخیره(beforSave) در لایه Manager استفاده کرده ایم.

به عنوان بخشی از اعتبار سنجی متد دیگری را در این بخش فراخوانی میکنیم که در مواردی به خطا می خورد اما این خطا نباید باعث Rollback کل ترانزکشن شود.

چگونه می توانیم فراخوانی این متد را غیر ترانزکشنال کنیم؟

با تشکر

1 پاسخ

+1 امتیاز
قبل توسط (1.2هزار امتیاز)
روی اولین متدی که @Transactional دارد، مثلاً متد save باید از مقداردهی مشخه noRollbackFor در @Transactional آن استفاده کنید و نام کلاسهای خطاهایی که نمی خواهید موجب rollback بشوند را مشخص کنید.

توجه بفرمایید که با توجه به ساختار پراکسی در spring تنها @Transactional روی اولین متد public ای که از بیرون spring bean فراخوانی می شود تاثیرگذار است و بقیه @Transactional ها به طور کلی بی تاثیر هستند.
قبل توسط (186 امتیاز)
همین کار را هم انجام دادیم. اما نشد.
باز هم رولبک میشه.
مشکل را با NativeQuery موقتا دور زدیم.
قبل توسط (1.2هزار امتیاز)
+1
لطفاً سلسله متدهایی که فراخوانی می شوند را نام ببرید. فکر می کنم تنظیمات را جای اشتباهی گذاشته اید. همانطور که در جواب عرض شد @Transactional روی فراخوانیهای داخلی bean لحاظ نمی شود. متد beforeSave هم که احتمالاً منظور شما از آن beforeMerge بوده است، متدی protected است و فراخوانی آن داخلی محسوب می شود.

سوالات مشابه

0 امتیاز
1 پاسخ 380 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
0 امتیاز
1 پاسخ 488 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
+1 امتیاز
1 پاسخ 334 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
0 امتیاز
1 پاسخ 366 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
+1 امتیاز
1 پاسخ 364 بازدید
0 امتیاز
1 پاسخ 507 بازدید
+1 امتیاز
1 پاسخ 828 بازدید
+1 امتیاز
1 پاسخ 320 بازدید
...