Я работаю с Eclipselink в качестве поставщика JPA. Следующий код используется для доступа субъектов из базы данных:Кэш Eclipselink - сохранение одного и того же объекта по транзакциям
em.merge(anEntity);
em.getTransaction().commit();
em.getTransaction().begin();
anEntity2 = em.find(targetClass, anEntity.getId());
Есть ли способ, чтобы гарантировать, что объект anEntity == anEntity2
будет держать, что всегда такой же ссылка на объект возвращается? Например, каким-то образом настройка кэша Eclipselink всегда возвращает один и тот же объект?
ОБНОВЛЕНИЕ Я прочитал следующее:
В JPA идентификатор объекта поддерживается в рамках транзакции, и (обычно) в пределах одной и той же EntityManager. Исключение составляет управляемый EntityManager, управляемый Java EE, идентификация объекта поддерживается только внутри транзакции.
Источник: link
Мой вопрос заключается в следующем: в среде Java EE, по сделкам, (с помощью переменных в ссылке) делает assert (employee1 == employee2);
удержание? Если нет, возможно ли как-то обойти это ограничение?
Я не уверен в вопросе, как если бы вы использовали один и тот же контекст EntityManager, он поддерживает контекст всех управляемых объектов в течение его жизни - если вы не вызываете em.clear(). Вы используете em.merge, поэтому, возможно, ваш экземпляр anEntity не является управляемым экземпляром первой транзакции? Если не используется anEntity = em.merge (anEntity); – Chris
Добавлено уточнение – krisy