2010-12-16 1 views
1

mein Code wie folgt vor:CacheRetrieveMode.BYPASS von Eclipselink ist nicht sinnvoll

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()); 

Genau wie das Beispiel "Einsatz als EntityManager Eigenschaften". here

Aber es gibt nichts anderes zwischen den beiden Ausgängen.

Antwort

1

Was erwarten Sie, anders zu sein und warum?

Beachten Sie, dass CACHE_RETRIEVE_MODE nur den gemeinsam genutzten Cache (2. Ebene) und nicht den Persistenzkontext (1. Ebene Cache/Transaktionscache) betrifft, die Objektidentität muss immer im Persistenzkontext für bereits gelesene Objekte gepflegt sein.

Wenn Sie Ihre Datenbank geändert haben, und erwarten, dass die neuen Daten dann versuchen Sie die BYPASS ein neues EntityManager verwenden oder versuchen Refresh() verwenden.

Eclipselink bietet auch die Abfrage-Hinweis „eclipselink.maintain-Cache“ = „false“ als auch die Persistenz Kontext zu umgehen.

Welche Version von Eclipse verwenden Sie? Ich glaube, es gab einen Bug in BYPASS in der Version 2.0, der in 2.1 behoben wurde. Probieren Sie die neueste Version aus.