Junior — Middle
101
Miks @Transactional märge ei rakendu Java privaatsüsteemidele?
Ettevõtted, kust küsiti
Vastus AI-lt
sobes.tech AI
Аннотация @Transactional в Spring работает через прокси, которые создаются вокруг бинов для управления транзакциями. Прокси перехватывают вызовы методов и добавляют логику начала и завершения транзакции.
Если метод приватный, вызов происходит внутри того же класса напрямую, минуя прокси. Из-за этого Spring не может перехватить вызов и применить транзакцию. Поэтому @Transactional не работает с приватными методами — они должны быть как минимум package-private, protected или public, чтобы прокси мог их перехватить.
Пример:
@Service
public class MyService {
@Transactional
public void publicMethod() {
privateMethod(); // вызов внутри класса, транзакция не сработает для privateMethod
}
@Transactional
private void privateMethod() {
// эта транзакция не будет применена
}
}