日期:2014-05-18  浏览次数:20690 次

寻大神帮我看下SQL转成HQL的错误
这是SQL
SELECT goods.* FROM
(SELECT * FROM yxgl_huodongjiangpin AS hdjp
WHERE hdjp.HDJL_ID = '712e452e-075d-43288981-62804c8cc615') AS jp,
kcgl_goods AS goods 
WHERE jp.GOODS_ID = goods.GOODS_ID;

这是HQL
select goods from
(select hdjp from YxglHuodongjiangpin as hdjp where hdjp.hdjpId=?) as jp,
KcglGoods as goods
where jp.goodsId=goods.goodsId;

执行后的异常,
严重: Servlet.service() for servlet [default] in context with path [/nwmrmf] threw exception [org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: ( near line 1, column 19 [select goods from (select hdjp from com.turing.manage.entity.YxglHuodongjiangpin as hdjp where hdjp.hdjpId=?) as jp,com.turing.manage.entity.KcglGoods as goods where jp.goodsId=goods.goodsId]; nested exception is org.hibernate.hql.ast.QuerySyntaxError: unexpected token: ( near line 1, column 19 [select goods from (select hdjp from com.turing.manage.entity.YxglHuodongjiangpin as hdjp where hdjp.hdjpId=?) as jp,com.turing.manage.entity.KcglGoods as goods where jp.goodsId=goods.goodsId]] with root cause
line 1:19: unexpected token: (
at org.hibernate.hql.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1200)
at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1041)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:759)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:611)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:263)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:150)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:209)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:834)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.turing.framework.page.BasicDao$1.doInHibernate(BasicDao.java:77)
请诸位帮我看下我的HQL哪里写的不对,SQL是在数据库里执行是正确的,现在就是HQL的问题!
第一次问问题,送分。求解决,
sql exception

------解决方案--------------------
这种子查询HQL好像不行吧。可能要建立关联。
------解决方案--------------------
不要把 HQL 当作 SQL 来用,如果是这样的话,那 SQL 不得淘汰了?

HQL 肯定可以转换为 SQL,而绝大多数的 SQL 是无法转换成为 HQL 的,正因为如此 Hibernate 也提供了支持原生 SQL 查询的接口!
------解决方案--------------------
hql不能子查询的,你有没有主外键关系?建了映射关系没?直接用对象调用也可以
------解决方案--------------------
引用: