穿越青云志之紫晴师姐:Hql语句查询多个表时,怎么样查询关联的外键表!急,麻烦各位了!

来源:百度文库 编辑:高考问答 时间:2024/05/04 21:48:37
from Resume resume inner join fetch resume.psjobSet where resume.psjobSet.id=1
这句HQL语句可以执行
resume为简历表,psjobSet为求职表,ulocussmall为一张地名表,
以下这句HQL语句就不能执行了不知道为什么
from Resume resume inner join fetch resume.psjobSet where resume.ulocussmall=1

异常如下:
illegal syntax near collection: ujobsmall [from com.Resume resume inner join fetch resume.psjobSet where resume.psjobSet.ujobsmall=1]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
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:134)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:113)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1602)
at dbwork.HibernateWork.excuteHql(HibernateWork.java:326)
at dbwork.Main.main(Main.java:24)
Caused by: illegal syntax near collection: ujobsmall
at org.hibernate.hql.ast.tree.DotNode.checkLhsIsNotCollection(DotNode.java:485)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:193)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:660)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1215)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4032)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3518)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1758)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
... 10 more

把两个表都选上,选择你要的字段,然后在条件里面把关联的字段条件加上,例如下面:

"SELECT article.title, article.author, article.publishdate, article.Article_Type, type.id

FORM article,type

WHERE article.Article_Type = type.id"

这里type.id是你type表里面栏目的id,对应你article表里面的Article_Type。

article.title, article.author, article.publishdate分别是文章的标题,作者,发布时间,这条语句并不一定可用,要对照你的表结构。如果有不清楚可以给我发信息,能把你的表结构发出来最好。