Hibernate ::意外令牌:FOR

时间:2011-10-09 17:06:19

标签: java hibernate

我有这个查询用于hibernate with java:

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);

但是我收到了一个错误:

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)

为什么?

1 个答案:

答案 0 :(得分:4)

查询中有问题的部分是:

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

FOR XML PATH是Hibernate中缺少的MSSQL 2005 feature。 HQL不是SQL的超集,当然也无法访问数据库特定的功能。

您可能应该将native query用于此用例,因为它允许您通过Hibernate API直接使用SQL查询数据库。

并在multiposting个问题时链接。