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 پاسخ 388 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
0 امتیاز
1 پاسخ 500 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
+1 امتیاز
1 پاسخ 338 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
0 امتیاز
1 پاسخ 373 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط nirvana (89 امتیاز)
+1 امتیاز
1 پاسخ 369 بازدید
0 امتیاز
1 پاسخ 517 بازدید
+1 امتیاز
1 پاسخ 835 بازدید
+1 امتیاز
1 پاسخ 324 بازدید
...