héritage JPA TABLE_PER_CLASS: Comment sélectionner des entrées uniquement superclasse?

StackOverflow https://stackoverflow.com/questions/4256393

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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top