现有三张表a(用户表),b(产品表),c(订单表)
a表里的字段为userid(用户名),company(用户公司名);用户既可以作为卖家,也可以作为买家
b表里的字段为pid(所卖产品编号),uid(卖家名(即同a表的userid关联)),pn(产品名称),pc(产品简介);
c表里的字段为pid(所买产品编号,同b表里的pid关联),uid(买家名(即a表的userid))用hibernate的HQL语句如何写,才能实现查询所有卖的产品、某个用户卖的所有产品(根据卖家userid查询)和某个用户买的所有产品(根据pid)
以上三个HQL语句,要求能在页面上只通过一个<logic:iterate id=one name="list" >遍历显示出company(卖家)、pn、pc,
即以下这种效果:<logic:iterate id=one name="list" >
${one.company};${one.pn};${one.pc};<br>
</logic:iterate >
另外问个问题,HQL语句能否像SQL一样进行多表查询,把不同的表的有用的字段组合在一起,然后在页面上显示啊如“from a as aa where aa.a1=b.a1 and aa.a1=1 ”或“select aa.a2,b.b2 from a as aa,b where aa.a1=b.a1 and aa.a1=1 ”再或有什么其他的方法(in子查询等)

解决方案 »

  1.   

    1、数据库设计怪怪的,改成两个表看下
        a:userId 、company
        b:pId、pn、pc、userId、SaleOrBuy(买还是卖)
    这样3个查询都很简单了 2.可以用SQLQuery,比较灵活点,直接用SQL语句然后用object[][]转
      

  2.   

    不是很明白为什么要用hql,直接用hibernate的映射配置应该可以实现你的要求了
      

  3.   

    貌似这个问题我已经答过N次了!这里我再答一次:
    最简单方法:
      Hibernate 自动封装对象方法!先在你的A类的pojo加上pn,pc属性!然后加上一个构造方法 public A(String company,String pn,String pc){
    this.company = company;
    ............
    }
    然多HQL的写法:select new A(a.company,b.pn,b.pc) from A a,B b where 你的条件!
    然后调用Hibernate的list方法,这样Hibernate就可以自动封装A对象!你就可以把list<A>传给表现层!
    !
    个人认为hibernate就这点在查询做的还可以!其他我就不多说Hibernate咋烂拉!
      

  4.   

    在Hibernate的配置文件配置他们之间的关系,
    HQL查询类似SQL查询
      

  5.   

    可以 有啊
    HQL 有 连接查询 但是 连接 正如 楼上所说的 
    连接要根据你的配置的 是面向对象的