Ich habe kürzlich eine Frage beantwortet, warum PolymorphismType.EXPLICIT beschränkt eine Abfrage nicht auf die spezifisch angeforderte Klasse . Meine Nachforschungen zu dieser Antwort haben mich dazu gebracht, mich zu fragen, warum es überhaupt eine solche Anmerkung gibt und wofür sie gut ist.
Die Hibernate-Dokumentation sagt folgendes:
Explizite Polymorphismen bedeutet, dass Klasseninstanzen nur von Abfragen zurückgegeben werden, die diese Klasse explizit benennen. Abfragen, die die Klasse benennen, geben nur Instanzen von zugeordneten Unterklassen zurück.
... und doch, wie es auf Stack Overflow mehrmals angesprochen wurde, die Formulierung ist ein wenig verwirrend. Personen möchten es verwenden, um Joins zwischen Unterklasse-Tabellen zu vermeiden, und es funktioniert nicht so, wie sie es erwarten. Insbesondere wenn Sie eine A- & gt; B-Klassenhierarchie haben und A mit EXPLICIT
markiert ist, werden Abfragen auf A auch B-Instanzen abrufen, da sie "... Unterklassen zugeordnet" sind.
Die Art und Weise, wie diese Annotation verwendet werden soll, ist, glaube ich, mit B markiert EXPLICIT
. Dann geben Abfragen auf A nur Instanzen von A zurück, nicht nur für Objekte, die tatsächlich vom Typ A sind, sondern auch für Objekte vom Typ B, wobei nur geteilte Felder ausgefüllt sind. Dadurch kann die Annotation verwendet werden für das leichte Muster .
Meine Frage ist also: Gibt es neben dem einfachen Muster noch weitere nützliche Anwendungsfälle für diese Anmerkung? Als eine zweite Frage, gibt es eine Dokumentation darüber, wie es mit den verschiedenen InheritanceType
-Werten, speziell verbundene Unterklasse und Tabelle pro Klasse interagiert?