Изолирован ли контекст сохранения JPA между потоками? - PullRequest
1 голос
/ 11 октября 2019

Мне известен Hibernate кэш 1-го уровня.
Я знаю, что он ограничен сессией, и я ожидаю, что сессия будет привязана к потоку.

Поскольку JPA является только спецификацией и может поддерживаться другими поставщиками, мой вопрос:
делает JPAПостоянный контекст всегда дает одну и ту же гарантию?

Например, будут ли изменения, сделанные в одном потоке

        Object o = entityManager.find(Object.class, id);
        o.setAttr(..);
        // not flushed

, когда-либо видны в другом потоке?

1 Ответ

1 голос
/ 11 октября 2019

В контексте постоянства сущности управляются, а EntityManager контролирует их жизненный цикл.

Доступ к контексту персистентности осуществляется через экземпляр EntityManager.

В соответствии с документацией Hibernate, которая является наиболее используемой реализацией спецификации JPA ( Глава 5. Транзакции и параллелизм ):

EntityManagerFactory - это дорогой в создании потокобезопасный объект, предназначенный для совместного использования всеми потоками приложения. Он создается один раз, обычно при запуске приложения.

EntityManager - это недорогой, не поддерживающий потоки объект, который следует использовать один раз для одного бизнес-процесса, одной единицы работы и затем отбрасывать.

...