2010-11-23 10 views
6

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.

+1

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. –

+0

jedes Update zu dieser Frage? Ich meine, haben Sie jemals die Antwort für dieses @gerry gefunden –

Antwort

4

Der Typ Ausdruck in Kombination mit TABLE_PER_CLASS Erbe doesn‘t Arbeit unter Eclipse 2.1.1 schreiben können, scheint dies ein Fehler zu sein.

Siehe auch die Antwort auf JPA 2.0: TYPE expression exception

8

Wenn Ihre Version von Eclipse JPA 2.0 unterstützt, Sie

SELECT p FROM Parent p WHERE TYPE(p) = Parent 
Verwandte Themen