寻大神帮我看下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不能子查询的,你有没有主外键关系?建了映射关系没?直接用对象调用也可以
[解决办法]
没有就这样吧from KcglGoods as goods left join YxglHuodongjiangpin as hdjp on goods.goodsId = hdjp.goodsId
where hdjp.hdjpId=?
[解决办法]
this.getHibernateSession().createSQLQuery(sql);
用原生sql就可以了。
[解决办法]
++
[解决办法]
++
[解决办法]
对啊,为什么不用原生sql了
[解决办法]
from KcglGoods
where goodsId in
(select goodsId from YxglHuodongjiangpin as hdjp where hdjp.hdjpId='xxxxxxx')
上面这样貌似效率不好 。
hibernate有提供createSQLQuery 直接可以用sql来查询 ,具体sql效率请自己优化
然后在转换成对应的实体 使用
List list = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(实体.class)).list()