Comment créer une requête de type "instance of" dans JPA 2.0?
Dire que nous avons un résumé @Entité de l'Animal, et plusieurs classes d'entité qui s'étendent de l'Animal, y compris le Chien, le Chat, le Singe et la chauve-souris.
Comment puis-je filtrer les résultats en fonction de l'extension de classe de l'entité?
Exemple:
Il y a des cases où l'utilisateur peut sélectionner les entités à récupérer.
[ ] Dog
[X] Cat
[X] Monkey
[ ] Bat
Maintenant, je veux récupérer les entités avec un (Nommé)de la Requête définie dans le Animal
classe. Ce genre de paramètres de requête puis-je mettre dans la requête, de sorte que seul le Chat et le Singe, les objets seront-ils de retour?
source d'informationauteur Kimi
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas absolument sûr que c'est pris en charge par la JPA, mais la manière de le faire en Hibernation, quelle que soit la stratégie de l'héritage, et donc même si vous ne disposez pas d'un discriminateur (ou n'avez pas la carte comme une propriété) est d'utiliser l'implicite
class
propriété :EDIT :
Je viens de trouver c'est possible JPA2 à l'aide de l'opérateur TYPE :
Vous pouvez utiliser le discrimnator de la colonne et de la valeur à rechercher seulement pour certains sous-types d'un type donné. Par défaut, le discriminateur de nom de la colonne est DTYPE en JPA,le type est une Chaîne de caractère et la valeur est le nom de la classe. Vous pouvez cependant remplacer cela par l'ajout du niveau de la classe d'annotation
@DiscriminatorColumn(name="KIND", discriminatorType=DiscriminatorType.INTEGER)
(pour la colonne discriminante nom et type) et@DiscriminatorValue("1")
(pour les discrimiminator valeur, pour une certaine classe). Vous pouvez ensuite l'utiliser dans la clause where de yoru requête JPQL à la seule extraction de certains sous-types, comme:WHERE DTYPE="Dog" OR DTYPE="Cat"