我有四个表之间查询,下面是我写的HQL语句:
select 
A.userNickName,
B.agentRealName,
C.lineName, 
D.sequenceId,
D.description,
D.contractLink,
D.createDate,
D.userRealName,
D.status   
from 
TUser A,
TAgent B,
TLine C,
TComplaint D 
WHERE 
D.userId = A.sequenceId 
AND D.agentId = B.sequenceId 
AND D.lineId = C.sequenceId 
执行不了,不知道是哪里写的不对
   

解决方案 »

  1.   

    你的TComplaint对应的实体里面维护的是一个user对象还是一个userId的属性?
      

  2.   

    1楼的朋友    是一个ID属性,TComplaint 表中对应了另外三张表的,都是保存的ID属性!
      

  3.   

    我试着写成下面的语句,也还是不能执行
    select A from (select A.userNickName,B.agentRealName,C.lineName, D.sequenceId,D.description,D.contractLink,D.createDate,D.userRealName,D.status   from TComplaint D  left outer join TUser A on D.userId=A.sequenceId  left outer join TAgent B D.agentId=B.sequenceId  left outer join TLine C D.lineId= C.sequenceId) A 
      

  4.   

    是这样子。。select A from 
    (select A.userNickName,B.agentRealName,C.lineName, D.sequenceId,D.description,D.contractLink,
    D.createDate,D.userRealName,D.status   
    from 
    TComplaint D  left outer join TUser A on D.userId=A.sequenceId  
    left outer join TAgent B on D.agentId=B.sequenceId  
    left outer join TLine C on D.lineId= C.sequenceId) A 
      

  5.   

    下面是错误消息:
    org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 15 [select A from (select A.userNickName,B.agentRealName,C.lineName, D.sequenceId,D.description,D.contractLink,D.createDate,D.userRealName,D.status   from jiaoya.nova.com.hbm.TComplaint D  left outer join TUser A on D.userId=A.sequenceId  left outer join TAgent B on D.agentId=B.sequenceId  left outer join TLine C on D.lineId= C.sequenceId) A ]
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
    at jiaoya.nova.com.dao.impl.page.PageMngImpl.findBySQL(PageMngImpl.java:46)
    at jiaoya.nova.com.dao.impl.page.PageMngImpl.findBySQL(PageMngImpl.java:71)
      

  6.   

    第一句select A 改成  select A.*  试试?
      

  7.   

    加成  A.* 后异常为:org.hibernate.hql.ast.QuerySyntaxException: expecting IDENT, found '*' near line 1, column 10 [select A.* from (select A.userNickName,B.agentRealName,C.lineName,D.sequenceId,D.description,D.contractLink,D.createDate,D.userRealName,D.status  from jiaoya.nova.com.hbm.TComplaint D  left outer join TUser A on D.userId=A.sequenceId  left outer join TAgent B on D.agentId=B.sequenceId  left outer join TLine C on D.lineId= C.sequenceId) A ]
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
    at jiaoya.nova.com.dao.impl.page.PageMngImpl.findBySQL(PageMngImpl.java:46)
    at jiaoya.nova.com.dao.impl.page.PageMngImpl.findBySQL(PageMngImpl.java:71)
    走了明天在来看了
      

  8.   


    这个select A ……好像只能对应实体类,放到这里不合适吧
      

  9.   

    select * 肯定不行 因为hql里面没有*
    你写的那个hql是对实体类来做查询的,查询的内容是实体类的属性
    希望你不是直接查询的数据库里面的表跟字段
      

  10.   

    问题找到是因为HQL语句中,对应对象的属性名写错导致无法查询,用hibernate工具生成的属性名A.userNickName,B.agentRealName
    这两个字段为:
    A.userNickname,B.agentRealname就这两个属性没写对导致问题哎谢谢各位帮我参考了