#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.
И, пожалуйста, ссылайтесь при многопостинге вопросов.