2010-11-30 4 views
2

J'ai une simple requête HQL SELECT. Lorsque les colonnes ne sont pas nulles, je suis capable de récupérer les enregistrements. Mais si l'une des colonnes est null, je n'obtiens pas cet enregistrement qui a une colonne nulle.Hibernate HQL Query Columns

Voici un exemple de requête HQL:

SELECT p.name as name, p.price as price 
FROM Pets p 

Si le nom ou le prix est nul, je ne suis pas entrée pour ce record. Je pensais que Hibernate retournera juste une valeur nulle pour cette colonne quand elle est nulle?

Comment puis-je fournir une autre valeur lorsque la colonne est nulle? Je l'ai testé avec la console Hibernate.

Répondre

0

Deux choses à confirmer:

  1. Votre modèle est nommé Pets, non? Ou est-ce Pet?
  2. Voulez-vous vraiment seulement ces deux propriétés? La manière habituelle est de récupérer l'objet complet, comme from Pet.

Mais même cela devrait fonctionner correctement (à condition que le modèle soit nommé Pets). Avez-vous des exceptions, ou vous obtenez une liste vide? Quel est le code SQL généré par hibernate (vous pouvez le voir en définissant la propriété hibernate.show_sql sur true). Si vous exécutez ce SQL manuellement dans votre base de données, obtenez-vous des enregistrements?

+0

J'ai utilisé des animaux de compagnie juste par exemple. Mais mon modèle actuel a un nom différent. J'ai plus de 10 propriétés mais je l'ai simplement simplifié ici à deux propriétés. J'obtiens un résultat lorsque j'exécute cette requête. Mais la requête contient uniquement des colonnes NON-NULL. Si une entrée a une valeur NULL, elle est ignorée par Hibernate. Si une entrée n'a pas d'entrée NULL, elle est affichée sur le résultat. – chris

+0

Aucune exception. Je reçois une liste vide si toutes les entrées contiennent une colonne null. Si l'une des entrées a une colonne non NULL, cette entrée est renvoyée correctement. – chris

+0

Qu'en est-il du SQL généré? Que se passe-t-il lorsque vous le lancez à la main? Pouvez-vous également fournir un exemple de données sur ce que vous voyez? – jpkrohling

0

Il se peut que ce soit une réponse tardive. Mais j'espère que ça aidera quelqu'un d'autre!

Je pense qu'Hibernate vous donne le tableau List of Object avec tous les éléments NULL. Si vous voulez voir cela, essayez d'imprimer la taille de la liste des résultats et du tableau pour le savoir.

Une autre façon est de modifier votre code comme ci-dessous

SELECT new Pets(p.name, p.price) 
FROM Pets p 

Ajoutez également un constructeur de haricot animaux pour définir le nom et le prix.

Maintenant, vous pouvez voir les beans Pets dans la liste avec des valeurs nulles définies pour le nom et le prix. Voir here pour plus d'initialisation partielle des haricots dans HQL.