Hibernate :: неожиданный токен: FOR - PullRequest
0 голосов
/ 09 октября 2011

У меня этот запрос будет использоваться в спящем режиме с 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 Ответ

4 голосов
/ 09 октября 2011

Проблемная часть запроса:

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

FOR XML PATH - это функция MSSQL 2005 , отсутствующая в Hibernate. HQL не является надмножеством SQL, и, конечно, он не может получить доступ к специфическим функциям базы данных.

Вероятно, вам следует использовать собственный запрос для этого варианта использования, поскольку он позволяет запрашивать базу данных напрямую, используя SQL через Hibernate API.

И, пожалуйста, укажите, когда мультипостинг вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...