Спящий режим :: неожиданный токен: ДЛЯ

#java #hibernate

#java #спящий режим

Вопрос:

У меня есть этот запрос, который можно использовать в режиме гибернации с 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:

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

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

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

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

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