Dies ist nicht ganz richtig. From the Javadoc, die Signatur der relevanten Methoden:
public Object get(Class clazz, Serializable id) ...
public Object load(Class theClass, Serializable id) ...
(irrelevante Teile und andere der Kürze halber weggelassen ladenen Versionen).
So kann die zu ladende Entität jeder Klasse sein, nur seine Kennung muss serialisierbar sein.
Entities tatsächlich net nicht serializable, wie in diesem Zitat aus Java Persistence with Hibernate, ch. 13.3.2:
Persistente Instanzen werden im Second-Level-Cache in einem disassemblierten Formular gespeichert. Stellen Sie sich die Disassemblierung als einen Prozess vor, der ein bisschen wie eine Serialisierung ist (der Algorithmus ist jedoch viel schneller, als Java-Serialisierung ).
Also würde ich vermuten, die Bezeichner (im Abfragecache) sind auch nicht serialisiert. Ich konnte keine Erklärung finden, warum id
Serializable
erklärt wird, und das fehlt, kann ich nur raten. Die API benötigt einen Typ für den Parameter id
, der ein gemeinsamer Supertyp mindestens der häufig verwendeten Bezeichner-Typen Number
und String
sein sollte, und abgesehen von Object
ist Serializable
die einzige Wahl.
aber ist dieses Zwischenspeichern über mehrere JVMs Standardoption? Ich denke es ist nicht, und wenn ich Cache oder Cluster konfiguriere, würde ich meine Objekte serialisierbar machen. Aber warum Hibernate muss mich zwingen, Serialisierung zu verwenden, wenn ich keinen verteilten Cache verwende? – Reddy
Nein, es ist nicht standardmäßig aktiviert. Ich würde vermuten, dass das Durchsetzen der serialisierbaren Implementierung einen Entwickler erkennen lassen sollte, dass ein Wertobjekt einer Serialisierung unterliegen könnte und daher auf diese Weise entworfen werden sollte. Nur eine Vermutung, ich habe nie wirklich darüber nachgedacht und habe es nicht einmal erkannt, bis ich deine Frage gelesen habe. – perdian