我有这个查询用于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)
为什么?
答案 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个问题时链接。