12.4.12. Instanciation dynamique


Il y a un type d'expression particulier qui n'est valide que dans la clause Select. Hibernate nomme cela une "dynamic instanciation". JPQL supporte cette fonctionnalité et nomme cela une "constructor expression".

Exemple 12.11. Exemple d'instanciation dynamique - Constructor

select new Family( mother, mate, offspr )
from DomesticCat as mother
    join mother.mate as mate
    left join mother.kittens as offspr
Copy to Clipboard Toggle word wrap
Au lieu de s'affairer avec l'Object[], nous englobons ici les valeurs dans un objet java de type-safe qui sera retourné en tant que résultat de la demande. La référence de la classe doit être totalement qualifiée et doit avoir un constructeur correspondant.
La classe doit ici être mappée. Si elle représente une entité, les instances résultantes devront être renvoyées dans un état NEW (non géré!).
C'est la partie que JPQL prend en charge également. HQL prend en charge des fonctionnalités en "dynamic instantiation" supplémentaires. Tout d'abord, la recherche peut spécifier de renvoyer une Liste à la place d'un Object[] pour les résultats scalaires :

Exemple 12.12. Exemple d'instanciation dynamique - List

select new list(mother, offspr, mate.name)
from DomesticCat as mother
    inner join mother.mate as mate
    left outer join mother.kittens as offspr
Copy to Clipboard Toggle word wrap
Les résultats de cette recherche correspondront à List<List> et non pas à List<Object[]>
HQL supporte également l'absorption de résultats scalaires dans une Mappe.

Exemple 12.13. Exemple d'instanciation dynamique - Mappe

select new map( mother as mother, offspr as offspr, mate as mate )
from DomesticCat as mother
    inner join mother.mate as mate
    left outer join mother.kittens as offspr

select new map( max(c.bodyWeight) as max, min(c.bodyWeight) as min, count(*) as n )
from Cat cxt
Copy to Clipboard Toggle word wrap
Les résultats de cette recherche correspondront à List<Map<String,Object>> et non pas à List<Object[]>. Les clés de la mappe sont définies par les alias donnés aux expressions Select.
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat