我想问一下有关count(*) 和 fetch的问题
Query query = session.createQuery(“SELECT COUNT(*) AS count FROM  Employee I inner join I.user O”)
是可以正常查询出来的,且解析出来的SQL为:select count(*) as col_0_0_ from employee employee0_ inner join userinfo userinfo1_ on employee0_.user_id=userinfo1_.user_id
但是当我在HQL语句中加了fetch的时候,就报错了。如:
Query query = session.createQuery(“SELECT COUNT(*) AS count FROM  Employee I inner join fetch I.user O”)
报的异常为:
Exception in thread "main" org.springframework.orm.hibernate3.HibernateQueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=O,role=null,tableName=userinfo,tableAlias=userinfo1_,origin=employee employee0_,colums={employee0_.user_id ,className=com.application.entity.UserInfo}}] [SELECT COUNT(*) AS count FROM  com.application.entity.Employee I inner join fetch I.user O]; nested exception is org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=O,role=null,tableName=userinfo,tableAlias=userinfo1_,origin=employee employee0_,colums={employee0_.user_id ,className=com.application.entity.UserInfo}}] [SELECT COUNT(*) AS count FROM  com.application.entity.Employee I inner join fetch I.user O]Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=O,role=null,tableName=userinfo,tableAlias=userinfo1_,origin=employee employee0_,colums={employee0_.user_id ,className=com.application.entity.UserInfo}}] [SELECT COUNT(*) AS count FROM  com.application.entity.Employee I inner join fetch I.user O]
请大家帮帮忙,这是什么原因。

解决方案 »

  1.   

    sql语句在数据库中执行一下看看有问题吗,如果没有是你程序哪有问题
      

  2.   


    根据你的信息,应该是fetch这个并没有被hql支持。
      

  3.   


    Query query = session.createQuery(“SELECT COUNT(*) AS count FROM  Employee I inner join fetch I.user O”) 把O去掉,改成:Query query = session.createQuery(“SELECT COUNT(*) AS count FROM  Employee I inner join fetch I.user”) 
      

  4.   

    我改成了Query query = session.createQuery(“SELECT COUNT(*) AS count FROM  Employee I inner join fetch I.user”)
    还是报一样的异常。
      

  5.   

    改成这样就OK了。。
    Query query = session.createQuery(“SELECT COUNT(*) AS count FROM  Employee I inner join  I.user O”) 
    也就是把这个fetch去掉就行!!
      

  6.   

    额 +fetch 和不加fetch完全是两回事好不。
     +fetch就是默认把你关联的 实体 实例化(非代理对象,你在数据库中获得的是1个对象)
    而不+fetch,你查询出来的就是两个对象。
      不过我也遇见你这问题。郁闷