Это правильное поведение, иначе, если вы измените объект один и объект два с разными значениями, у вас будут проблемы при сохранении их. Происходит то, что вызов загрузки объекта два обновляет объект, загруженный при первом вызове. Они должны указывать на один и тот же объект, поскольку они являются одним и тем же объектом. Это гарантирует, что грязные данные не могут быть записаны.
Если вы вызываете em.clear () между двумя вызовами, сущность один должна отключиться, и ваш чек вернет false. Однако в этом нет необходимости, ссылка на затмение фактически обновляет ваши данные до последней версии, которая, как я предполагаю, вам нужна, поскольку она часто меняется.
С другой стороны, если вы хотите обновить эти данные с помощью JPA, вам необходимо получить пессимистичные блокировки для сущности, чтобы базовые данные не могли измениться в БД.
Вам нужно будет отключить кеш запросов, так как ваши параметры кеша просто удаляли кеш объекта из игры, а не кеш запроса, поэтому вы не получаете новые результаты:
В вашем коде:
em.createNamedQuery("MyLocation.findMyLoc").setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache).getResultList().get(0);
Или в файле persistence.xml:
<property name="eclipselink.query-results-cache" value="false"/>