JPA TABLE_PER_CLASS Vererbung: Wie nur SELECT Super Einträge?
-
27-09-2019 - |
Frage
Ich bin mit Eclipse als JPA-Provider. Ferner bin ich mit der folgenden TABLE_PER_CLASS Vererbungsstruktur
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@NamedQueries({
@NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p")
})
public class Parent {
// the class code follows here
}
@javax.persistence.Entity
@NamedQueries({
@NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c")
})
public class Child extends Parent {
// the class code follows here
}
Das Problem ist jetzt, dass ich nur die Einträge der Elternklasse erhalten möchten. Aber mit der benannten Abfrage „SELECT p FROM Eltern p“ auch alle Einträge aus der untergeordneten Tabelle zurückgegeben.
Die Auswahl oder Code finden sich wie folgt:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
Dabei Abfrage das heißt, die "SELECT p FROM Eltern p".
Wie kann ich nur erhalten wirklich die übergeordneten Einträge und nicht alle Einträge dieser inheritacne Hierarchie?
Kurz gesagt: Wie kann ich lassen alle Kindereinträge unberührt und geben nur die übergeordneten Einträge
? EDIT 1:
Ich bin mit Eclipselink 2.0.1, aber jedes Mal, wenn ich axtavt-Lösung über den Ausdruck des Typs versuchen, ich die folgende Fehlermeldung erhalten:
"Invalid Type Expression on [my.domain.Parent]. The class does not have a descriptor, or a descriptor that does not use inheritance or uses a ClassExctractor for inheritance".
Ich habe auch auf die neueste stabile Version 2.1.1 von Eclipse aktualisiert, aber nicht das Problem beheben.
Lösung 2
Der Typ Ausdruck in Kombination mit TABLE_PER_CLASS Erbe doesn‘t Arbeit unter Eclipse 2.1.1, dies scheint ein Fehler zu sein.
Siehe auch die Antwort auf JPA 2.0: Ausnahme TYPE Ausdruck
Andere Tipps
Wenn Ihre Version von Eclipselink unterstützt JPA 2.0, können Sie schreiben
SELECT p FROM Parent p WHERE TYPE(p) = Parent