CacheRetrieveMode.BYPASS EclipseLink не является полезным - PullRequest
1 голос
/ 16 декабря 2010

Следуйте за моим кодом:

Company cc = em.find(Company.class, clientUser.getCompany().getId());
System.out.println(cc.getCompany_code());

HashMap findProperties = new HashMap();
findProperties.put(QueryHints.CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS);

Company oo = em.find(Company.class, clientUser.getCompany().getId(), findProperties);
System.out.println(oo.getCompany_code());

Так же, как в примере «Используется как свойства EntityManager». здесь

Но между двумя выходами нет ничего различного.

1 Ответ

1 голос
/ 17 декабря 2010

Чем вы ожидаете отличаться и почему?

Обратите внимание, что CACHE_RETRIEVE_MODE влияет только на общий кэш (2-й уровень), а не на контекст постоянства (кэш 1-го уровня / кэш транзакций), идентичность объекта всегда должна бытьподдерживается в контексте постоянства для объектов, которые уже были прочитаны.

Если вы изменили базу данных и ожидаете новых данных, попробуйте BYPASS с использованием нового EntityManager или попробуйте использовать refresh ().

EclipseLink также предоставляет подсказку запроса "eclipselink.maintain-cache" = "false", чтобы также обойти контекст постоянства.

Какую версию EclipseLink вы используете?Я считаю, что была ошибка в BYPASS в версии 2.0, которая была исправлена ​​в 2.1.Попробуйте последнюю версию.

...