Ich verwende EclipseLink als JPA-Provider. Ferner bin ich mit dem Erbe folgende TABLE_PER_CLASS StrukturJPA TABLE_PER_CLASS Vererbung: Wie man nur Superklasseneinträge auswählt?
@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 möchte nur Einträge der Elternklasse erhalten. Mit der genannten Abfrage "SELECT p FROM Parent p" werden aber auch alle Einträge aus der Child-Tabelle zurückgegeben.
Die Auswahl oder findet Code lautet wie folgt:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
Dabei Abfrage heißt die "SELECT p FROM Eltern p" ist.
Wie kann ich wirklich nur die übergeordneten Einträge und nicht alle Einträge dieser inheritacne Hierarchie erhalten?
Kurz gesagt: Wie kann ich alle untergeordneten Einträge unberührt lassen und nur die übergeordneten Einträge zurückgeben?
EDIT 1:
Ich bin mit Eclipselink 2.0.1, aber jedes Mal, wenn ich axtavt-Lösung über den Ausdruck des Typs versuchen, erhalte ich folgende Fehlermeldung:
"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 aktualisiert auf die neueste stabile Version 2.1.1 von EclipseLink, aber es löst das Problem nicht.
Haben Sie das jemals herausgefunden? Ich versuche das Gleiche zu tun. Für meine Abfrage möchte ich nur die übergeordneten Zeilen zurückgeben, aber die untergeordneten Zeilen werden ebenfalls zurückgegeben. –
jedes Update zu dieser Frage? Ich meine, haben Sie jemals die Antwort für dieses @gerry gefunden –