[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-kakie-urovni-isolation-sushchestvuyut":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},621,"kakie-urovni-isolation-sushchestvuyut",14,"spring","Spring","🌱","Какие уровни isolation существуют?","Isolation определяет, насколько транзакция изолирована от изменений, вносимых другими параллельными транзакциями.\n\n### Проблемы параллельного доступа\n\n| Проблема | Описание |\n|----------|----------|\n| Dirty Read | Чтение данных, которые ещё не зафиксированы другой транзакцией |\n| Non-Repeatable Read | Повторное чтение тех же данных даёт другой результат |\n| Phantom Read | Повторный запрос возвращает другое количество строк |\n\n### Уровни изоляции\n\n| Isolation | Dirty Read | Non-Repeatable Read | Phantom Read |\n|-----------|------------|---------------------|--------------|\n| READ_UNCOMMITTED | Возможно | Возможно | Возможно |\n| READ_COMMITTED | Нет | Возможно | Возможно |\n| REPEATABLE_READ | Нет | Нет | Возможно |\n| SERIALIZABLE | Нет | Нет | Нет |\n| DEFAULT | Зависит от БД | | |\n\n```java\n@Transactional(isolation = Isolation.READ_COMMITTED)\npublic void updateBalance(Long accountId, BigDecimal amount) { }\n\n@Transactional(isolation = Isolation.REPEATABLE_READ)\npublic void transfer(Long fromId, Long toId, BigDecimal amount) { }\n```\n\n> **На собеседовании:** важно знать проблемы параллельного доступа и какой уровень от чего защищает. Для большинства приложений подходит READ_COMMITTED (PostgreSQL по умолчанию). Частая ошибка -- использовать SERIALIZABLE повсеместно «для надёжности», что сильно снижает производительность.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":19,"keywords":20,"schemaAnswer":19,"featuredSnippetReady":21},"Какие уровни propagation существуют? — Gymterview","Propagation определяет, как метод с `@Transactional` ведёт себя относительно уже существующей транзакции.",[7,13],true]