select a.订单id, a.发生日期, 发货单位, 订单金额 from 表订单 a
left join (
select 订单id ,sum( 产品数量*产品单价) 订单金额 
from 表订单产品
group by 订单id 
)b on a.订单id =b.订单id
这句sql 该怎么转成hql啊订单表 跟订单产品表 是一对多

解决方案 »

  1.   

    Hibernate的HQL查询的是表与对象的映射,大多数都是相对简单的关系。
    像你这种自定义的查询,而没有相应的对象与之映射的话,还是在Hibernate中使用SQL吧,而不是HQL
      

  2.   

    显然你用了Hibernate,为什么一定要写 HQL 语句呢,,HQL语句其实执行效率比较慢,, 你在DAO层 的方法中 ,可以不写getSession().createQuery(String HQL) 方法,为什么不直接用 getSession().createSQLQuery(String sql)这个方法执行SQL语句,   
      

  3.   

    别名的问题怎么办 sql语句中 订单金额 在数据库并没有这个列名。这是sql sum()给我查询出来的结果集的列名。怎么把它搞进 订单model里面去啊。
      

  4.   

    Hibernate是把关系型数据库转换为对象的方式来进行管理。这样符合软件编程的思想
    Hibernate把外键映射成一个实体。
    也就是说,当一个表中存在一个外键的时候,那么生成的实体类中将会封装成一个外键的实体类。
    所以当你查询主表的时候,从表的数据也就获取到了。但是这个会有hibernate懒加载的问题。
    这个你还需慢慢掌握啊
      

  5.   

     没必要这样
      在生成映射文件时,给有关联的文件之间建立关系
     是一对一还是一对多   甚至是多对多  就看你自己了
     建立关系后可以使用 lazy 懒加载 或 fetch 抓取 出来 select a.订单id, a.发生日期, 发货单位, 订单金额 from 表订单 a
     条件可以通过  a 点出来
      

  6.   

    这是一个联查 关联2张表 要是多对多 那就得再来一张链表
    HIBERNTATE有多对多关联完全可做。
    用了HIBERNATE还在里面用SQL语句不好。
    表即对象 OO的思想楼主没有深刻的去理解。
      

  7.   

    select * from dome;   ==>from dome;
    前提是必须用hibernate做适配,继承HibernateDaoSupport
     然后调用hibernate里的里面方法
    /*
     * 分页/带条件查询
     */
    public List pageQuery(final String hql,final Integer page,final Integer size,final Object ...p){
    return super.getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session)
    throws HibernateException, SQLException {

    Query query=session.createQuery(hql);

    //处理参数
    if(p!=null){
    for (int i = 0; i < p.length; i++) {
    query.setParameter(i, p[i]);
    }
    }

    //分页处理
    if(page!=null&&size!=null){
    query.setFirstResult(size*(page-1)).setMaxResults(size);
    }

    return query;
    }

    });
    }
    这个方法很强大,可以实现分页,也可以实现带条件查询(后面的分页可以不带),也可以实现带条件分页。看你怎么用,怎么用怎么强至于你说的把你那些语句转成hql语句很简单,当你映射了hibernate关系之后,在实体关系表里,
    自然有关系表的对象
    就不用谢什么左右连接,
    select a.订单id, a.发生日期, 发货单位, 订单金额 from 表订单 a
    left join (
    select 订单id ,sum( 产品数量*产品单价) 订单金额  
    from 表订单产品
    group by 订单id  
    )b on a.订单id =b.订单id直接:比如说:select * from dome1 join dome2 where dome1.id=dome.id
         ==>from dome as dometest dometest.关系表的对象.关系表里的属性=......
      

  8.   

    自己重新建立个VO对象 将返回的结果集中的对象数组封装成VO对象  这个hibernate执行SQL是支持的
      

  9.   

    hql你就看成是select * 的sql
      

  10.   

    在生成映射文件时,给有关联的文件之间建立关系
    left jion fetch 抓取出你要的关联"对象"
      

  11.   

    SQL 怎么写,你的 HQL 也怎么写
    不用想太多了
      

  12.   

    表的关联 是必须建好的from 订单 a, 订单产品 b where a.id = b.id放到 你特定的pojo中,再对pojo 操作,得到你想要的的吧HQL 里面操作的就已经是pojo对象了