7
votes

Comment choisir la classe d'un objet dans Hibernate HQL?

Comment puis-je sélectionner la classe d'un objet dans HQL? Lorsque je fais ce qui suit: xxx

hibernate renvoie un entier (par exemple [12, "nom"]) au lieu d'un objet de classe. Comment puis-je retourner une classe Java, ou au moins le nom de la classe ou de l'entité? Ou, si cela n'est pas possible, comment puis-je convertir la classe 12 en java?

Pour des raisons de performances, je ne peux pas interroger les objets complets, c'est-à-dire que je ne peux pas faire < Pré> XXX

Cordialement, Jochen


0 commentaires

4 Réponses :


2
votes

scalaire HQL qui spécifie explicitement que le nom de la colonne de la clause SELECT renvoie une liste de objet [] .Chage d'index dans la matrice renvoyée correspond à la colonne correspondante de la clause Select.

à Renvoie une liste d'objet, utilisez Sélectionnez E dans l'entité E ou simplement de l'entité . xxx

pour restreindre l'enregistrement Retourné par le HQL, appliquez quelques conditions dans la clause WHERE du HQL, par exemple: de l'entité E Où e.name = xxxxx


3 commentaires

Battez-moi-moi :) Lorsque vous avez sélectionné les entités, vous pouvez utiliser les appels Java GetClass réguliers pour connaître la classe renvoyée.


Bonjour, je ne peux pas faire cela, puisque j'obmoignons deux dossiers de Gazillion avec centaines de classes différentes. La requête résultante serait trop lente.


Pouvez-vous appliquer un peu où la clause du HQL?



0
votes

Si vous souhaitez limiter le nombre nombre de colonnes de la liste SELECT , vous pouvez nous utiliser l'opérateur neuf à l'intérieur du HQL .

C'est-à-dire xxx

également, ajoutez un constructeur correspondant dans l'entité de la classe que cette requête peut utiliser.

Ceci Vous donnera la liste , initialisée avec seulement 2 valeurs.

Ceci est utile lorsque vous avez besoin d'un instantané d'un objet important de manière performante. Lire ici pour l'API docs ou ici pour un exemple.


3 commentaires

J'ai essayé cela, mais cela n'a pas fonctionné avec des paramètres de classe. Laissant dehors les travaux E.Class.


Quelle est la valeur correspondante de classe dans dB? J'espère que c'est une chaîne, alors vous devez définir la chaîne et essayer d'obtenir la catégorie de celle-ci.


C'est une propriété intégrée d'hibernate. Par exemple. Dans les requêtes, vous pouvez faire Sélectionnez E. Nom de l'entité E Où E.Class = personne . Toutefois, Sélectionnez E.Class retournera un int, que j'ai besoin de mapper dans une classe.



9
votes

Si vous êtes hibernate4, vous pouvez utiliser la fonction HQL 'Type ()' pour obtenir l'entité type xxx

si vous êtes hibernate3, la session.iterate () est une entité de retour comme hibernateproxy avec ID Seulement, et vous pouvez obtenir un nom d'entité et une pièce d'identité sans initialiser. xxx


0 commentaires

5
votes

Vous pouvez simplement utiliser la méthode Addentity () pour indiquer à Hibernate d'utiliser votre classe pour mapper la réponse

 Query query = session.createSQLQuery(
    "select e.class,e.name from Entity e where <your conditions>")
    .addEntity(Entity.class)
    List<Entity> result = query.list();


0 commentaires