刚才写了一个hql语句,目的是从三个表中查询数据。先不考虑这三个表之间是否有关联。
hql语句如下:
- select w.*,u.unitsName,s.sectorName,st.statusName from WorkersInfo w,UnitsInfo u,SectorInfo s,StatusInfo st where w.unitsId = u.unitsCode and w.sectorId = s.sectorCode and w.statusInfo.statusId = st.statusId
异常信息如下:: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V
详细信息如下:
- at org.hibernate.hql.antlr.HqlBaseParser.atom(HqlBaseParser.java:3533)
- at org.hibernate.hql.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3200)
- at org.hibernate.hql.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3082)
- at org.hibernate.hql.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2802)
- at org.hibernate.hql.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:570)
- at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2586)
- at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2449)
- at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2413)
- at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2331)
- at org.hibernate.hql.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2296)
- at org.hibernate.hql.antlr.HqlBaseParser.expression(HqlBaseParser.java:2082)
- at org.hibernate.hql.antlr.HqlBaseParser.aliasedExpression(HqlBaseParser.java:2249)
- at org.hibernate.hql.antlr.HqlBaseParser.selectedPropertiesList(HqlBaseParser.java:1455)
- at org.hibernate.hql.antlr.HqlBaseParser.selectClause(HqlBaseParser.java:1365)
- at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1106)
- at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
- at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
- at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
- at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
- at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
- at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
- at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
- at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
- at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
- at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
- at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
- at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
- at org.qpyong.emp.dao.WorkersInfoDAO.findByPropertyForEmployee(WorkersInfoDAO.java:159)
- at org.qpyong.emp.dao.WorkersInfoDAO.main(WorkersInfoDAO.java:271)
上网找了些资料,有的是hql语句有错误,有的说少了antlr.jar包,有的说hql语句有问题。但是我检查了很多遍,也看不出我的hql语句的问题在哪。所以我排除了hql语句错误的说法。但是如果是少了antlr.jar包,我用以下的hql查询的时候却没有问题:
- select count(*) from WorkersInfo w,UnitsInfo u,SectorInfo s,StatusInfo st where w.unitsId = u.unitsCode and w.sectorId = s.sectorCode and w.statusInfo.statusId = st.statusId
谁能告诉我是怎么回事呀?