TGViewer
Java Geek Java Geek @java_geek · 2.37K subscribers
Post #464 499
🧠 Почему @Transactional не работает?

Один из самых частых вопросов: "Я поставил @Transactional, но транзакция не откатывается. Почему?"

📌 Ответ — в механизме прокси Spring.

Spring оборачивает бины с @Transactional в прокси, которые перехватывают вызовы и управляют транзакцией. Но работает это только при вызове метода извне. Если ты вызываешь метод с @Transactional внутри того же класса, прокси не используется, и аннотация игнорируется.

💡 Пример:


@Service
public class UserService {
public void registerUser() {
createUser(); // ❌ Транзакция не работает!
}

@Transactional
public void createUser() {
// изменения в БД
}
}


📎 Решения:

1. Вынести метод в другой бин:


@Service
public class UserService {
private final UserWriter writer;

public UserService(UserWriter writer) {
this.writer = writer;
}

public void registerUser() {
writer.createUser(); // ✅ работает
}
}

@Service
public class UserWriter {
@Transactional
public void createUser() {
// изменения в БД
}
}


2. Или вызвать себя через ApplicationContext:


@Autowired
private ApplicationContext context;

public void registerUser() {
context.getBean(UserService.class).createUser(); // ✅ работает
}


⚠️ Но лучше использовать первый способ — он чище архитектурно.

👉 @java_geek
  • 👍 2
  • ❤ 1
More from @java_geek
  1. Sep 24, 2026Что такое стек-трейс? Стек-трейс (stack trace) представляет собой список вызовов методов в…
  2. Sep 17, 2026Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)? Д…
  3. Sep 15, 2026Array vs ArrayList Выбор между Array (стандартным Java-массивом) и ArrayList зависит от сп…
  4. Sep 11, 2026Какова цель ключевого слова final, когда оно используется с переменной? Ключевое слово fin…
  5. Sep 9, 2026☕ Java Tip: Как работает var в Java С версии Java 10 появился ключевое слово var. Оно упро…
  6. Sep 7, 2026Что такое перегрузка методов в Java? Перегрузка методов — это мощный приём, который позвол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →