Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 472новые вакансии за сутки·93 728вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 267
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 124
  • Облачные технологии14 081
  • QA вакансии3 459
  • Backend вакансии2 116
  • Инженер данных1 804
  • Продакт-менеджер1 264

Разработка

  • Android1 866
  • iOS1 701
  • Fullstack вакансии988
  • AI вакансии952
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 662
  • Java6 548
  • Node.js2 019
  • .NET1 722
  • Kotlin1 619
  • Rust1 454
  • C#711
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 766
  • DevOps вакансии6 053
  • Linux-инфраструктура5 491
  • Terraform / IaC4 262
  • CI/CD3 242
  • Мониторинг и Observability1 787
  • SRE567
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 140
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

Другие направления

  • Проджект-менеджер615
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 297
  • Вакансии в Европе23 854
  • Вакансии в Канаде4 476
  • Работа в России3 921

По формату

  • Удалённые вакансии75 046
  • Релокация в США44 297
  • Гибридная работа12 398
  • Офисная работа7 076

По уровню

  • Senior вакансии42 676
  • Middle вакансии20 894
  • Junior вакансии6 725

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме HibernateВсе вопросы
HibernateSeniorТеория

Как Hibernate управляет транзакциями базы данных и как он интегрируется с @Transactional Spring?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Spring регистрирует JpaTransactionManager, а @Transactional через AOP-прокси автоматически открывает/коммитит/откатывает Hibernate-транзакцию; dirty checking позволяет не вызывать save() явно — изменения флашатся при коммите.

Как Hibernate управляет транзакциями

Hibernate сам по себе не создаёт транзакции автоматически — он делегирует управление через абстракцию org.hibernate.Transaction (нативный API) или JPA EntityTransaction. При работе через JTA (Jakarta Transactions) транзакции координируются контейнером или менеджером транзакций (Atomikos, Bitronix, Narayana).

В автономном режиме транзакция выглядит так:

Session session = sessionFactory.openSession();
Transaction tx = null;
try {
    tx = session.beginTransaction();
    Employee emp = session.get(Employee.class, 1L);
    emp.setSalary(100_000);
    tx.commit();
} catch (Exception e) {
    if (tx != null) tx.rollback();
    throw e;
} finally {
    session.close();
}

Транзакции в Hibernate и интеграция со Spring @Transactional

Роль Spring в управлении транзакциями

Spring предоставляет абстракцию PlatformTransactionManager. При использовании Hibernate + JPA Spring регистрирует JpaTransactionManager, который управляет жизненным циклом EntityManager и оборачивает его транзакцию в прокси-метод.

@Configuration
@EnableTransactionManagement
public class PersistenceConfig {
    @Bean
    public PlatformTransactionManager transactionManager(
            EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }
}

Аннотация @Transactional

Spring AOP перехватывает вызов метода, помеченного @Transactional, и выполняет:

  1. Открывает транзакцию (или присоединяется к существующей).
  2. Выполняет метод.
  3. При успехе — commit; при непроверяемом исключении — rollback.
@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository repo;

    @Transactional
    public void promote(Long empId, String newTitle) {
        Employee emp = repo.findById(empId)
            .orElseThrow(() -> new EntityNotFoundException("emp " + empId));
        emp.setTitle(newTitle);  // dirty checking — UPDATE выполнится при commit
        // явный save() не нужен
    }

    @Transactional(readOnly = true)
    public List<Employee> findAll() {
        return repo.findAll(); // Hibernate не флашит, оптимизирует L2-кэш
    }

    @Transactional(rollbackFor = CheckedException.class)
    public void riskyOp() throws CheckedException {
        // проверяемое исключение тоже откатит транзакцию
    }
}

Уровни распространения (Propagation)

  • REQUIRED (по умолчанию) — присоединяется к существующей; если нет — создаёт.
  • REQUIRES_NEW — всегда новая транзакция, текущая приостанавливается.
  • SUPPORTS — участвует если есть, без транзакции если нет.
  • NOT_SUPPORTED — приостанавливает текущую, работает без транзакции.
  • NEVER — бросает исключение если транзакция активна.
  • MANDATORY — требует активную транзакцию, иначе исключение.
  • NESTED — savepoint внутри текущей транзакции (только JDBC, не JTA).

Dirty Checking и flush

Hibernate отслеживает изменения управляемых сущностей (dirty checking). При коммите транзакции он автоматически вызывает flush(), генерируя UPDATE-запросы. Явный save() не нужен для managed-сущностей.

Подводные камни

  • Self-invocation: вызов @Transactional-метода из того же класса минует AOP-прокси — транзакция не начнётся. Выносите вызов в другой бин или используйте ApplicationContext.getBean().
  • private методы: Spring AOP на основе CGLIB не может перехватить private @Transactional — аннотация молча игнорируется.
  • Checked исключения не откатывают по умолчанию: только RuntimeException вызывает rollback; для checked нужно явно rollbackFor.
  • readOnly = true не запрещает запись: это подсказка для драйвера и JDBC-пула (например, направление на реплику), но Hibernate физически не блокирует INSERT.
  • LazyInitializationException вне транзакции: если сессия закрыта до сериализации, LAZY-поля не проинициализированы — используйте DTO или @Transactional в контроллере (осторожно — антипаттерн).
  • REQUIRES_NEW и lock: новая транзакция может заблокировать ту же строку, которую держит приостановленная — deadlock.
  • Уровень изоляции: по умолчанию используется уровень изоляции СУБД; при необходимости — @Transactional(isolation = Isolation.REPEATABLE_READ), но не все БД поддерживают все уровни через JDBC.

Типичные ошибки

  • Путать термин «hibernate transactions spring» с соседним механизмом Hibernate.
  • Не называть границу lifecycle, transaction, thread или request для «hibernate transactions spring».
  • Игнорировать production-эффекты «hibernate transactions spring»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «hibernate transactions spring» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «hibernate transactions spring».
  • Уточнить, какие настройки или API меняют «hibernate transactions spring» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Hibernate →

Источники

  • https://docs.spring.io/spring-framework/reference/data-access/orm/hibernate.html
←Предыдущий вопросЧто такое Hibernate и что такое ORM (Object-Relational Mapping)?Следующий вопрос→Как сравнить Hibernate с raw SQL, query builder и другими ORM по контролю, типобезопасности и производительности?

Связанные темы

Hibernatebackend-designpersistence-debugging

Частые вопросы на собеседовании

  • Что такое проблема N+1 в Hibernate и как её решить?
  • Что такое lazy loading в Hibernate и когда возникает LazyInitializationException?
  • В чём разница между SessionFactory и Session в Hibernate?
  • Что такое Hibernate и что такое ORM (Object-Relational Mapping)?