2011-10-09 4 views
0

Je cette requête être utilisé sur Mise en veille prolongée avec java::: Mise en veille prolongée jeton inattendu: POUR

String hql = "select part.ID,part.PartNumber,part.Name,parttype.Name,partkind.Name, 
         partdevice.Name,part.Count,STUFF((SELECT ', ' + cabinet.Name FROM Cabinet as 
         cabinet,Part_Cabinet as part_cabinet WHERE part.ID=part_cabinet.PaId and cabinet.ID = 
         part_cabinet.CabId FOR XML PATH('')), 1, 1, ''),part.Descript from Part as part, 
         PartDevice as partdevice,PartKind as partkind,PartType as parttype Where 
         part.Kind=partkind.ID and part.Type=parttype.ID and part.Device=partdevice.ID"; 
Query _q = session.createQuery(hql); 

Mais je reçois une erreur:

unexpected token: FOR 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.atom(HqlBaseParser.java:3473) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3168) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3040) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2750) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:568) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2518) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2474) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2343) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2269) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2224) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2010) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1786) 

Pourquoi?

Répondre

4

La partie problématique de la requête est:

WHERE part.ID=part_cabinet.PaId 
AND cabinet.ID = part_cabinet.CabId 
FOR XML PATH('') 

FOR XML PATH est un MSSQL 2005 feature absent en veille prolongée. HQL n'est pas un surensemble de SQL, et certainement il ne peut pas accéder aux fonctionnalités spécifiques à la base de données.

Vous devriez probablement utiliser native query pour ce cas d'utilisation car il vous permet d'interroger directement la base de données en utilisant SQL via les API Hibernate.

Et s'il vous plaît lien lorsque multiposting questions.

Questions connexes