héritage JPA TABLE_PER_CLASS: Comment sélectionner des entrées uniquement superclasse?
-
27-09-2019 - |
Question
J'utilise EclipseLink comme fournisseur de JPA. De plus, je suis en utilisant la structure de l'héritage TABLE_PER_CLASS suivant
@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
}
Le problème est maintenant que je veux seulement recevoir des entrées de la classe parente. Mais avec la requête nommée « SELECT p de Parent p » également toutes les entrées de la table des enfants sont retournés.
Le code ou sélectionnez trouver est la suivante:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
Ainsi est-à-dire la requête "SELECT p du parent p".
Comment puis-je recevoir que vraiment les entrées parent et non toutes les entrées de cette hiérarchie inheritacne?
En bref: Comment puis-je laisser toutes les entrées de l'enfant intact et retourner uniquement les entrées parent
?EDIT 1: J'utilise EclipseLink 2.0.1, mais chaque fois que je la solution de axtavt via l'expression de type, je reçois l'erreur suivante:
"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".
Je l'ai mis à jour également la dernière version stable 2.1.1 de EclipseLink, mais il ne résout pas le problème.
La solution 2
L'expression de type en combinaison avec l'héritage TABLE_PER_CLASS n » œuvre sous EclipseLink 2.1.1, cela semble être un bug.
Voir aussi la réponse à JPA 2.0: TYPE expression exception
Autres conseils
Si votre version de EclipseLink prend en charge JPA 2.0, vous pouvez écrire
SELECT p FROM Parent p WHERE TYPE(p) = Parent