Pouvons-nous obtenir de l'unique objet de requête hql?
Je suis en train d'écrire une requête hql , ma tâche consiste à activer le bus. Je vais d'abord obtenir un messege de client comme busId#busStatus
, j'ai tout d'abord rechercher ce particulier busId est actif ou inactif Donc je dois écrire une requête select, mais dans hibernate query.list()
retourne list
. Ici, je pense que la liste est inutile , un seul objet, c'est assez .
Voici mon code ,
String hql="from BusDetailBean where Busid= :busId and bus_status=:busStatus";
Query query = session.createQuery(hql);
query.setParameter("busId", busId);
query.setParameter("busStatus", busStatus);
List<BusDetailBean> busDetails=(List<BusDetailBean>)query.list();
if(busDetails.isEmpty())
{
//my other stuff
}
else
{
//bus ativation stuff
}
Ma question est la requête select ne renvoie qu'un seul objet, si la liste n'est pas vide, j'ai utiliser pour la boucle dans le reste de la partie. Alors, comment puis-je optimiser ce code. quelqu'un peut-il m'aider dans cette.
double possible de stackoverflow.com/questions/12427725/...
Qu'en est
Qu'en est
busDetails.iterator().next();
?
OriginalL'auteur Raghu | 2015-01-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
query.getSingleResult()
Merci pour votre réponse , j'ai utilisé
query.uniqueResult();
ce qui se passe si il n'y a pas de résultat?
OriginalL'auteur CodZilla
Vous pouvez obtenir l'objet à l'indice 0 dans la liste:
query.uniqueResult();
OriginalL'auteur Jens
Vous pouvez utiliser
query.setMaxResults(1);
query.uniqueResult();
OriginalL'auteur Kalaiarasan Manimaran
Je ne pense pas que persitence doit être mélangé avec de la logique métier.
Qu'en retour Facultatif de la persitence couche et si le résultat est présent/absent de faire quelque chose au niveau supérieur?
Dans la persistance de la couche de quelque chose comme:
return query.list()
.stream()
.findFirst()
Selon les docs, sera de retour au premier résultat, ou vide facultatif si la collection est vide.
Et puis:
Gardez à l'esprit qu'il peut retourner null quand il n'y a pas de match ou même jeter exception d'exécution donné plus d'un résultat.
OriginalL'auteur slnowak
Pour ce type de problème, la sortie de la boîte solution dans
Hibernate
est d'utiliser leuniqueResult()
méthode dans leQuery
classe:De la
Hibernate
Javadoc:OriginalL'auteur avs
à l'aide de requête.uniqueResult() vous n'avez pas de s'assurer que si vous avez beaucoup de résultats , alors vous aurez un seul d'entre eux.
Avec uniqueResult() vous placez un garde/contrainte à vos résultats en être conscients que cette requête doit toujours renvoyer un résultat unique.
OriginalL'auteur alexd