TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10.1K subscribers
Post #4275 1.19K
🧠 Частая ловушка при работе с @Transactional в Spring

Сейчас покажу вам один распространённый анти-паттерн, который легко пропустить — вызов транзакционного метода внутри того же класса.

📌 Пример:


@Service
public class UserService {

@Transactional
public void registerUser(UserDto dto) {
saveUser(dto);
}

@Transactional
public void saveUser(UserDto dto) {
// сохранение пользователя
}
}


💥 Проблема:
Spring не применит транзакцию к saveUser(), потому что вызов происходит внутри одного и того же бина — минуя прокси.

Spring AOP работает через прокси, и @Transactional "срабатывает", только если метод вызывается извне, через прокси-объект.

⚠️ Это может привести к очень странным багам: вы думаете, что транзакция есть, а её нет.

💡 Как исправить:

1. Вынести метод в отдельный бин:


@Service
public class UserSaver {
@Transactional
public void save(UserDto dto) {
// сохраняем
}
}

@Service
public class UserService {
private final UserSaver saver;

public UserService(UserSaver saver) {
this.saver = saver;
}

public void registerUser(UserDto dto) {
saver.save(dto);
}
}


2. Или использовать TransactionTemplate вручную.

✅ Всегда проверяйте, как вызываются методы с @Transactional. Особенно при рефакторинге!

📲 Мы в MAX

👉@BookJava
  • 👍 2
  • 👎 2
  • 🔥 1
  • 🤡 1
  • 💊 1
More from @bookjava
  1. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  2. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  3. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  4. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
  5. Sep 16, 2026🧠@Value vs @ConfigurationProperties — не выбирай наобум Оба способа хороши для конфигурац…
  6. Sep 14, 2026🧠 Трюк с @EventListener в Spring — убираем лишний @TransactionalEventListener Когда тебе…
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 →