Tabelle pro Unterklasse Vererbung-Beziehung: Wie Abfrage der Übergeordneten Klasse ohne laden jede Unterklasse ??? (Hibernate)
Angenommen, ein Tabelle pro Unterklasse Vererbung Beziehung, die beschrieben werden können Balg (Aus wikibooks.org - siehe hier)
Bemerken Übergeordneten Klasse ist nicht Abstrakt
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Project {
@Id
private long id;
//Other properties
}
@Entity
@Table(name="LARGEPROJECT")
public class LargeProject extends Project {
private BigDecimal budget;
}
@Entity
@Table(name="SMALLPROJECT")
public class SmallProject extends Project {
}
Ich habe ein Szenario wo brauche ich nur zum abrufen der Übergeordneten Klasse. Aufgrund der performance-Probleme, Was soll ich tun ausführen, um eine HQL-Abfrage, um die Parent-Klasse und nur der Übergeordneten Klasse ohne laden jede Unterklasse ???
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist ein workaround beschrieben:
Definieren Sie Ihre
Parent
Klasse als MappedSuperClass. Nehmen wir an, der übergeordneten Klasse zugeordnet istPARENT_TABLE
Für jede Unterklasse, verlängern die
AbstractParent
Klasse und definieren Ihre SecondaryTable. Jedes persistente Feld definiert, in der übergeordneten Klasse zugeordnet werden, um die Tabelle definiert SecondaryTable. Und schließlich, verwenden Sie AttributeOverrides, wenn nötigDefinieren und eine andere Person mit dem Zweck der Rückholung nur die übergeordnete Klasse
Sonst nichts. Siehe, wie oben gezeigt, die ich verwendet habe nur JPA-spezifischen Annotationen
Update: Es erscheint die erste option nicht funktioniert, als ich dachte.
Erste option:
Geben Sie die Klasse in der where-Klausel:
Zweite option:
Verwenden des explicit-Polymorphismus, die Sie festlegen können mithilfe von Hibernate ist
@Entity
Anmerkung:Dies ist, was Hibernate Core Dokumentation schreibt über explizite Polymorphismus:
Siehe auch
Tatsächlich, es gibt einen Weg, um nur die Oberklasse, die Sie gerade brauchen, um verwenden Sie die native Abfrage von JPA, in meinem Fall bin ich mit JPA-Repositories, es wäre so etwas wie:
Die Flagge nativeQuery als wahr zulassen, läuft der native-SQL-Datenbank.
Wenn du mit Entity Manager-check this out: https://www.thoughts-on-java.org/jpa-native-queries/