Sobes.tech
Senior

@Transactional ilə metod niyə tranzaksiya yaratmaya bilər?

sobes.tech Süni İntellekt

AI-dan cavab

@Transactional qeydlə işarələnmiş metod bir neçə səbəbdən tranzaksiya yaratmaya bilər:

  • Əgər metod birbaşa eyni sinif daxilində çağırılırsa (proxy olmadan), Spring tranzaksiyanı tətbiq etməyəcək, çünki tranzaksiyalar proxy vasitəsilə işləyir.
  • Əgər Spring konfiqurasiyası tranzaksiyaları dəstəkləmirsə və ya qeydlər tanınmırsa.
  • Əgər metod private və ya final olaraq işarələnibsə, proxy onu üzərinə yaza bilməz və tranzaksiya yaratmaz.
  • Əgər artıq aktiv tranzaksiya mövcuddursa və cari metod propagation ilə konfiqurasiya olunubsa, yeni tranzaksiya yaratmaz.

Sinif daxilində çağırış nümunəsi:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // kod
    }

    public void caller() {
        transactionalMethod(); // çağırış eyni sinif daxilindədirsə, tranzaksiya yaradılmayacaq
    }
}