Senior
Ինչու՞ մեթոդը, որը նշված է @Transactional-ով, կարող է չստեղծել գործարք։
sobes.tech AI
Պատասխան AI-ից
@Transactional նշանագրված մեթոդը կարող է մի քանի պատճառներով չստեղծել գործարք.
- Եթե մեթոդը ուղղակիորեն կանչվում է նույն դասի ներսում (առանց պրոքսի), Spring-ը չի կիրառի գործարքը, քանի որ գործարքները աշխատում են պրոքսի միջոցով:
- Եթե Spring կոնֆիգուրացիան չի ներառում գործարքների աջակցություն կամ նշանագրման ճանաչում:
- Եթե մեթոդը նշված է որպես
privateկամfinal, պրոքսին չի կարող այն վերագրել գործարքի համար: - Եթե արդեն ակտիվ գործարք կա և ընթացիկ մեթոդը կոնֆիգուրացված է propagation-ով, որը նոր գործարք չի ստեղծում:
Օրինակ՝ խնդիր ներսի դասի կանչով:
@Service
public class MyService {
@Transactional
public void transactionalMethod() {
// կոդ
}
public void caller() {
transactionalMethod(); // գործարք չի ստեղծվի, եթե կանչը նույն դասի ներսում է
}
}