-->
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.  [ 5 posts ] 
Author Message
 Post subject: probleme avec order by complexe
PostPosted: Wed Feb 22, 2012 7:37 am 
Newbie

Joined: Wed Nov 02, 2011 10:22 am
Posts: 10
bonjour

j'utilise un framework de grille developpé en interne dans ma boite, du coup beaucoup de chose sont générées tel que certaines requetes dont une qui permet de récupérer la page ou se situe le produit modifié,cela permet de positionner la page ou se situe le produit, en effet si un tri sur la grille est actif par libellé et qu'on change le libellé du produit de AAA en ZZZ alors il faudra aller en derniere page et ne pas rester sur la premiere.

pour ce faire une requete est généré et récupère donc la partie basse de la requete d'affichage de la grille, la partie basse à partir du FROM et change uniquement le select

le tri étant effectué sur une colonne calculé
ce qui nous donne : (oui je sais la requete est pas mal mais tres rapide et fonctionne tres bien sur n'importe qu'elle tri sauf sur cette colonne calculé)

Code:
select produitAlias.id
from com.strator.iris.common.domain.Produit as produitAlias
left join produitAlias.stocks as stockAlias with stockAlias.groupeId = :groupeId and stockAlias.typeStock = 0
left join produitAlias.stocks as stockEnCoursAlias with stockEnCoursAlias.groupeId = :groupeId and stockEnCoursAlias.typeStock = 3
left join produitAlias.referenceProduitFournisseurPrivilegiee as refProdFouAlias
left join refProdFouAlias.informationReferenceTabac as infRefTabAlias
left join refProdFouAlias.informationReferenceERecharge as infRefERechargeAlias
left join produitAlias.categorieFamille.categorieActivite.metierNational as metierNationalAlias
left join refProdFouAlias.fournisseur as fournisseurAlias
left join infRefTabAlias.dateLivraisons as dateLivraisonAlias
left join refProdFouAlias.contenanceProduit as contenanceProduitAlias with contenanceProduitAlias.groupeId = 1
left join produitAlias.TVA as tvaAlias with tvaAlias.groupeId = :groupeId

where produitAlias.groupeId in (:groupeId)
and produitAlias.estProduitGenerique = false 
and produitAlias.estReference = true
and produitAlias.typeProduit <> 5 
and (dateLivraisonAlias.id is null or dateLivraisonAlias.DRDAltadis.id is null or dateLivraisonAlias.DRDAltadis.id = :drdDebitant) 
and produitAlias.dateSuppression is null  and produitAlias.produitParent is null
and (produitAlias.estActif = :estActif or stockAlias.quantite > 0)
and metierNationalAlias.codeMetierNational <> 2 
and fournisseurAlias.typeFournisseur = 0 
and refProdFouAlias.informationReferenceAutre is null   
and refProdFouAlias.groupeId in (1, :groupeId)

order by (select case  when produitIn.id is not null then cast( case  when (produitIn.typeMargeProduit=3  and coalesce(stockin.quantite,0)>0) then cast(round(round(produitIn.prixDeVente*100/(1+produitIn.TVA.tauxTVA))/100)*stockin.quantite as long) when produitIn.typeMargeProduit=3 then (cast(0 as long))  when (produitIn.typeMargeProduit=1  and coalesce(produitAlias.prixAchat,0)>0 and coalesce(stockin.quantite,0)>0)  then (round(round(round(produitAlias.prixAchat*100/coalesce(contenanceProduitAlias.quantiteUVparUC,1))/100)*100/coalesce(contenanceProduitAlias.quantiteUparUVC,1))/100*stockin.quantite)  when (produitIn.typeMargeProduit=1  and coalesce(produitAlias.prixAchat,0)=0)  then cast(0 as long)  when (produitIn.typeMargeProduit=2  and coalesce(produitAlias.prixAchat,0)>0 and coalesce(stockin.quantite,0)>0)  then (round(round(round(produitAlias.prixAchat*100/coalesce(contenanceProduitAlias.quantiteUVparUC,1))/100)*100/coalesce(contenanceProduitAlias.quantiteUparUVC,1))/100*stockin.quantite)  when (produitIn.typeMargeProduit=2  and coalesce(produitAlias.prixAchat,0)=0 and coalesce(stockAlias.quantite,0)>0 and coalesce(produitIn.prixDeVente,0) >0  and coalesce(produitIn.coefficientDeMarge,0) >0  and coalesce(tvaAlias.tauxTVA,0) >0)  then (((produitIn.prixDeVente)/((1+tvaAlias.tauxTVA)*produitIn.coefficientDeMarge))*stockin.quantite)  else cast(0 as long)  end  as long) else 0 end from com.strator.iris.common.domain.Produit produitIn left outer join produitIn.stocks stockin  where produitIn.produitParent =  produitAlias.id )  asc


l'exception généré:

Code:
GRAVE: "Servlet.service()" pour la servlet FacesServlet a généré une exception
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: query [...] <------ ICI se trouve la querry formatté au dessus donc je la supprime pour plus de lisibilité
   at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
   at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
   at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
   at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261)


je cherche desespérement pourquoi le order by ne passe pas et me génère cette erreur, peut etre qu'en lisant l'order by vous allez me dire que tel ou tel truc n'est pas encore géré dans hibernate ou alors THE solution :)

j'utilise hibernate

Code:
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>3.3.2.GA</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-c3p0</artifactId>
   <version>3.3.2.GA</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-ehcache</artifactId>
   <version>3.3.2.GA</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-annotations</artifactId>
   <version>3.4.0.GA</version>
</dependency>


j'ai constaté lors de l'affichage de ma grille dans le select se trouve le hql qui est dans le order by car il s'agit d'une colonne affiché du coup il y a quelque chose comme cela de généré:

Code:
select (case when ...then...else...end case when ...then...else..end) col_0_1
join
where
order by col_0_1


si je tri par la colonne en question je retrouve dans le order by col_0_1 et non le case when... comme dans la requete qui me pose souci, je pensai avoir :

Code:
select (case when ...then...else...end case when ...then...else..end) col_0_1
join
where
order by  (case when ...then...else...end case when ...then...else..end)


merci beaucoup d'avoir pris le temps de lire


Top
 Profile  
 
 Post subject: Re: probleme avec order by complexe
PostPosted: Fri Feb 24, 2012 4:37 am 
Newbie

Joined: Wed Nov 02, 2011 10:22 am
Posts: 10
ca m'aide pas trop ca...


Top
 Profile  
 
 Post subject: Re: probleme avec order by complexe
PostPosted: Mon Feb 27, 2012 12:26 pm 
Newbie

Joined: Wed Nov 02, 2011 10:22 am
Posts: 10
personne?


Top
 Profile  
 
 Post subject: Re: probleme avec order by complexe
PostPosted: Tue Feb 28, 2012 1:04 pm 
Newbie

Joined: Wed Nov 02, 2011 10:22 am
Posts: 10
est il possible de mettre un select case... dans un order by? car j'ai l'impression que c'est ca qui deconne dans ma requete...

merci


Top
 Profile  
 
 Post subject: ]Re: probleme avec order by complexe
PostPosted: Wed Feb 29, 2012 9:07 am 
Newbie

Joined: Wed Nov 02, 2011 10:22 am
Posts: 10
finalement j'ai réécris la requete en supprimant le "order by select case ... from ..." en ajoutant les jointures qui vont bien pour n'avoir que "order by case when ..." et tout fonctionne correctement.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 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:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.