Sobes.tech
Junior — Middle

შესაძლებელია თუ არა ახსნათ, რა იგულისხმება ტრანზაქციების მართვის დროს გავრცელების დონეებში?

sobes.tech AI

პასუხი AI-სგან

ტრანზაქციების მართვაში გავრცელების დონეები განსაზღვრავს, როგორ იქცევა ტრანზაქცია მეთოდების გამოძახებისას, რომლებიც თავადაც შეიძლება იყოს ტრანზაქციული. ეს მნიშვნელოვანია იმისთვის, რომ გავიგოთ, გამოიყენებს თუ არა მეთოდი არსებული ტრანზაქციას, შექმნის ახალს ან იმუშავებს ტრანზაქციის გარეშე.

Spring-ის (Java) ძირითადი გავრცელების დონეები:

  • REQUIRED (ნაგულისხმევი): თუ არსებობს მიმდინარე ტრანზაქცია, მეთოდი მასთან შეუერთდება, წინააღმდეგ შემთხვევაში შექმნის ახალს.
  • REQUIRES_NEW: ყოველთვის ქმნის ახალ ტრანზაქციას, მიმდინარე (თუ არსებობს) შეჩერებულია.
  • SUPPORTS: თუ არსებობს ტრანზაქცია, მეთოდი მუშაობს მასში, წინააღმდეგ შემთხვევაში — ტრანზაქციის გარეშე.
  • NOT_SUPPORTED: მეთოდი ყოველთვის მუშაობს ტრანზაქციის გარეშე, მიმდინარე ტრანზაქცია შეჩერებულია.
  • MANDATORY: მეთოდი უნდა შესრულდეს არსებული ტრანზაქციის ფარგლებში, წინააღმდეგ შემთხვევაში გამოიწვევს გამონაკლისს.
  • NEVER: მეთოდი არ უნდა შესრულდეს ტრანზაქციაში, წინააღმდეგ შემთხვევაში — გამონაკლისი.
  • NESTED: თუ არსებობს ტრანზაქცია, ქმნის შიდა (savepoint) ტრანზაქციას, წინააღმდეგ შემთხვევაში — ახალს.

მაგალითი:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveData() {
    // ეს მეთოდი ყოველთვის ახალი ტრანზაქციაშია
}