[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-hibernate-chto-takoe-entitymanager-i-chem-on-otlichaetsya-ot-session":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":18,"progress":19,"seo":20},1040,"chto-takoe-entitymanager-i-chem-on-otlichaetsya-ot-session",19,"hibernate","Hibernate","🐻","Что такое EntityManager и чем он отличается от Session?","EntityManager — JPA-интерфейс для управления персистентными сущностями. Session — Hibernate-интерфейс, расширяющий EntityManager дополнительными возможностями.\n\n```java\n\u002F\u002F EntityManager (JPA — стандартный)\n@PersistenceContext\nprivate EntityManager entityManager;\n\nentityManager.persist(entity);      \u002F\u002F сохранить\nentityManager.find(User.class, id); \u002F\u002F найти\nentityManager.merge(entity);        \u002F\u002F слить Detached\nentityManager.remove(entity);       \u002F\u002F удалить\nentityManager.createQuery(\"...\");   \u002F\u002F JPQL-запрос\n\n\u002F\u002F Session (Hibernate — расширенный)\nSession session = entityManager.unwrap(Session.class);\n\nsession.byNaturalId(User.class).using(\"email\", email).load(); \u002F\u002F поиск по натуральному ключу\nsession.byMultipleIds(User.class).multiLoad(1L, 2L, 3L);      \u002F\u002F batch load\nsession.setDefaultReadOnly(true);                               \u002F\u002F read-only для всей сессии\nsession.enableFilter(\"activeOnly\");                             \u002F\u002F динамические фильтры\n```\n\n### Основные различия\n\n| Возможность | EntityManager (JPA) | Session (Hibernate) |\n|-------------|-------------------|-------------------|\n| persist() | Да | Да |\n| find() | Да | Да |\n| Natural ID | Нет | `byNaturalId()` |\n| Multi-load | Нет | `byMultipleIds()` |\n| Фильтры | Нет | `enableFilter()` |\n| Read-only mode | Нет | `setDefaultReadOnly()` |\n\n### Важное\n\n- EntityManager — стандартный JPA API, переносимый между реализациями\n- Session — Hibernate-специфичный, с дополнительными возможностями\n- В Spring приложении используйте EntityManager, переключаясь на Session через `unwrap()` только при необходимости\n- Spring Data JPA полностью абстрагирует от EntityManager\u002FSession\n\n### Частые ошибки\n\n- Использовать Session без необходимости — теряется переносимость кода\n- Создавать EntityManager вручную — в Spring используйте `@PersistenceContext` или Spring Data\n- Путать `persist()` и `merge()` — persist для новых (transient), merge для detached; persist бросит исключение для detached\n\n### Как используется в 2026\n\n- Spring Data JPA — основной API; прямой доступ к EntityManager — для кастомных запросов\n- Session используется для Hibernate-специфичных оптимизаций (batch load, natural ID, filters)\n\n> **На собеседовании:** EntityManager — стандарт JPA, Session — расширение Hibernate. По умолчанию используйте EntityManager. Переход на Session через `unwrap()` оправдан для конкретных задач: Natural ID, multi-load, фильтры. В Spring Data JPA прямой доступ к EntityManager\u002FSession нужен редко.","","middle",[15,16,17,7],"entity-manager","session","jpa",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"EntityManager vs Session в Hibernate — Gymterview","EntityManager — стандартный JPA API. Session — расширение Hibernate с Natural ID, multi-load, фильтрами. Переход через unwrap(). Сравнительная таблица.","EntityManager vs Session: стандартный JPA и расширения Hibernate — Gymterview","EntityManager — стандарт JPA, Session — расширение Hibernate. Natural ID, multi-load, фильтры доступны только через Session.",[26,27,28,8,29,30,31,32,33],"EntityManager","Session","JPA","unwrap","NaturalId","multiLoad","enableFilter","PersistenceContext","EntityManager — JPA-интерфейс для управления сущностями (persist, find, merge, remove). Session — Hibernate-интерфейс, расширяющий EntityManager: Natural ID (byNaturalId), multi-load (byMultipleIds), фильтры (enableFilter), read-only mode. Доступ через entityManager.unwrap(Session.class). По умолчанию используйте EntityManager, переключайтесь на Session для специфичных оптимизаций.",true]