-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Fonction NVL
PostPosted: Mon Dec 11, 2006 6:42 pm 
Newbie

Joined: Fri Apr 08, 2005 6:33 am
Posts: 5
Location: Lyon, France
Bonjour,

J'ai fait quelques recherche sur le forum mais je n'ai rien trouvé de bien concluant sur le sujet.

Je dois faire une requête sur une table comportant une période de date. Une période dont la date de fin n'a pas été définie a cette information qui vaut NULL.

Ma requête (en SQL) ressemble donc à
Code:
SELECT * FROM TABLE
WHERE TABLE.date_debut <= :madate
AND (TABLE.date_fin IS NULL OR TABLE.date_fin >= :madate)

Avec une telle requête, sur une base Oracle, les performances s'effondrent.

La première solution qui m'a été soufflée a été d'alimenter les dates nulles avec 31/12/9999 et de supprimer la condition sur le IS NULL.

Ce n'est pas très pratique à gérer, surtout dans l'IHM.

Ensuite, en Oracle toujours, on m'a parlé de la fonction NVL, à utiliser comme suit
Code:
SELECT * FROM TABLE
WHERE TABLE.date_debut <= :madate
AND NVL(TABLE.date_fin, :madate) >= :madate


Comme la base de donnée utilisée peut varier, existe-t-il une méthode Hibernate qui me ferait cela de manière générique ?

Et si oui, à partir de quelle version ?

Merci de vos réponses.

_________________
Sorry for my English


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 15, 2006 7:34 pm 
Expert
Expert

Joined: Tue Dec 28, 2004 7:02 am
Posts: 573
Location: Toulouse, France
A priori non, d'autant qu'il me semble que NVL n'est pas standard. La solution parfois utilisée est de mettre une date factice, souvent la date maximale qu'on sait que le SGBD supporte (genre le 31/12/4199 ou un truc comme ça sur Oracle il me semble).

Au pire, si tu veux faire le sql que tu indiques et profiter du chargement automatique d'hibernate, tu peux toujours faire une sql-query et indiquer les types de resultats (result-type ou un truc comme ça de mémoire). Comme ça, tu peux appeler list() sur cette sql-query de la même façon que sur une requête HQL ou Criteria en récupérant directement une liste de tes objets mappés.

_________________
Baptiste
PS : please don't forget to give credits below if you found this answer useful :)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Dec 28, 2006 10:32 am 
Expert
Expert

Joined: Tue Dec 28, 2004 7:02 am
Posts: 573
Location: Toulouse, France
Je pense à un truc, tu peux aussi définir ta propre fonction dans le dialecte utilisé. L'avantage, c'est qu'éventuellement NVL peut être indéfini mais que tu peux alors toujours la définir comme tu le veux.

Pour ça, il suffit de faire une sous-classe de ton dialecte actuel et ajouter le registerFunction() qui va bien (regarde le dialecte que tu dérives en exemple). C'est assez simple à faire.

_________________
Baptiste
PS : please don't forget to give credits below if you found this answer useful :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.