2016-10-26 5 views
0

Ich habe eine Entität mit benannter Abfrage.eclipselink Abfrage-Ergebnisse-Cache funktioniert nicht

@Entity(name = "MyEntity") 
@Table(name = "mytable") 
//@ReadOnly 
@NamedQueries({ 
@NamedQuery(
     name = "exampleFind", 
     query = "[..]", 
hints = {@QueryHint(name= QueryHints.QUERY_RESULTS_CACHE, value= "TRUE")}) 
}) 
@Cacheable 
@Cache(type = CacheType.FULL) 
public class MyEntity { 

Als ich diese Klasse mit @ReadOnly annotieren dann diese Abfrage nicht die Datenbank anstößt (verwendet nur Ergebnisse Cache), aber wenn ich @ReadOnly Anmerkung entfernen es führt immer SQL für Datenbank.

Wie kann dieser Cache ohne @ReadOnly aktiviert werden? Gibt es Einschränkungen beim Ergebniscache?

Ich benutze Eclipse 2.4.1

Antwort

0

In unserer Anwendung wir einige Mühe, die Abfrage-Cache hatten als gut zu funktionieren. Sie müssen sicherstellen, dass Ihre Entitäten und Ihre Abfrageergebnisse zwischengespeichert werden.

Für uns funktioniert es, wenn wir die Shared-Cache-Modus in der persistence.xml-DISABLE_SELECTIVE gesetzt:

<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode> 

mit diesem Zusammen wir @Cache verwenden, um die Art von Caching wir wollen für unsere Einheiten zu konfigurieren. Und @Cacheable(false), um es für einige zu deaktivieren.

Laut der developers manual ist diese Einstellung tatsächlich die Standardeinstellung, daher sollte auch das Entfernen der aktuellen Einstellung funktionieren.

+0

Danke. Leider hilft es nicht. Gibt es eine Möglichkeit, Caches in Eclipselink zu protokollieren/zu überwachen, um zu überprüfen, ob der Cache aktiviert ist oder wann er aktualisiert wird? Vielleicht wird dieser Cache jedes Mal ungültig gemacht und das ist der Grund, warum es immer eine SQL-Anfrage an die Datenbank gibt. – Mario

+0

Sie können nach einzelnen Objekten fragen, wenn sie im geteilten Cache zwischengespeichert werden. . Dies kann mit dem IdentityMapAccessor geschehen: https://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching. Es gibt viel mehr Leistungsmessung, aber ich habe diese noch nicht ausprobiert. Außerdem können Sie die Protokollierung für Eclipselink auf die feinsten Details in Ihrer persistence.xml einstellen – Thirler

Verwandte Themen