Ich verwende jetzt die JPA2 @Cacheable-Annotation für meine Entitäten, und alles funktioniert gut.
Ich muss jetzt eine ManyToOne-Assoziation zwischenspeichern.
Im klassischen Hibernate war es notwendig, die Assoziation mit @Cache zu kommentieren.
%Vor%Und das funktioniert. Aber es scheint, dass wir die JPA2 @Cacheable-Annotation nur für die Entität selbst verwenden können.
Fehle ich etwas oder war das JPA-Komitee zu dunkel, um zu erkennen, dass Assoziationen ebenso zwischengespeichert werden müssen wie Entitäten? Sicherlich kann es nicht die dunkle Option sein?
Ich denke, nach einigen Recherchen kann ich meine eigene Frage beantworten. Der Schlüssel ist, dass Hibernate Objekte in der 2LC dehydriert und dies beeinflusst, ob Sie die Assoziationen explizit zwischenspeichern müssen.
Bitte fügen Sie weitere Details hinzu, wenn ich etwas verpasst habe oder Details falsch verstanden habe.
Hier ist eine vereinfachte Klassenstruktur:
%Vor%Der Second Level Cache (2LC) speichert Entitäten in einer dehydrierten Form, zB:
%Vor%Die letzte 1 in den Schülerdaten ist der Fremdschlüssel zum Tutor.
Wenn Sie also einen Verweis auf die Schüler-ID 1 haben und dem Verweis auf den Tutor folgen, erhalten wir einen Cache-Treffer, weil der Fremdschlüssel im Cache ist. Es ist keine zusätzliche Auswahl erforderlich.
Wenn Sie jedoch andersherum getStudents () auf dem Tutor aufrufen, gibt es in der 2LC keinen Fremdschlüssel, sodass eine Auswahl erforderlich ist. (Sobald die Auswahl abgeschlossen ist, hat der Ruhezustand die IDs und kann beginnen, die 2LC zu treffen).
Um dies zu vermeiden, müssen Sie die alte org.hibernate.annotations.Cache-Annotation zu der @ OneToMany-Beziehung hinzufügen.
Ich habe keine EclipseLink-Installation zur Hand, daher kann ich das nicht testen, aber ich verstehe, dass EclipseLink die 2LC-Daten in der Form des ursprünglichen Objektdiagramms speichert, daher ist das Obige nicht relevant. Laut Chris 'Antwort wird die Entität mit ihren Referenzen zwischengespeichert, so dass eine weitere Kommentierung nicht erforderlich ist.
Tags und Links jpa hibernate jpa-2.0 second-level-cache