有两张表A:(aid/PK,aname)--> A(100,张三) --> 持久类:private Integer aid; private Stirng aname;
       B:(bid/PK,aid/FK) --> B(1,100)   --> 持久类:private Integer bid; private A a;
通过执行hibernate的HQL查询语句。
Query q = session.createQuery("如何写这个HQL语句");
List list = q.list();
...
request.setAttribute("list", list);
要得到这样的结果bid,aname(1,张三); 
而在show.jsp页面上如何正确显示(1,张三)。注:要的是(1,张三)而不是(1,100)。
<logic:present name="list" scope="request">
  <logic:iterate id="list" name="list" scope="request">
    <bean:write name="list" property="bid"/>
    <bean:write name="list" property="这里要什么写才能显示为:张三,而不是100" />
  </logic:iterate>
</logic:present>
在线等

解决方案 »

  1.   

    要用到 关联了楼主 搜索一下 many-to-one 的配置
      

  2.   

    你的问题很说,但是跨表访问的问题。
    如何写这个HQL语句:from A a,B b where a.id=b.getA.getId();
    property="这里要什么写才能显示为:张三,而不是100:这个问题就好办了 你放在里就拿呀,建议你用之前封装一下对象
     
      

  3.   

    sorry 
    应该是inner join
    :(
      

  4.   

    先谢谢大家
    2楼所说的,我也想过,重新封装一个对象,替换赋值。
    可是这样子是不是感得没办要做这么多的工作。往往是我就想替换一个属性,也要重新封装一个对象。
    不知hibernate关联操作,有没有其它的设置,可以一下就能通过主键找到相应的替换。
    继续关注有没有再好的解决方法
    大家帮忙,谢谢!
      

  5.   

    当然我通过HQL。可以拿到想要的结果集,关健是把这个结果集(1,张三)放在前台显示时,我的标签属性要怎么给。<bean:write name="list" property="显示为:张三,而不是100" /> 
    像2楼说的,对得到的结果集再进行一下封装,然后,再在页面里显示。对,这是可以做到的,但是总觉这要做是不是多余的。有没有更好的办法。望高手们帮忙解答
      

  6.   

    这样做就可以了..
    String sql = select a.* from A as a JOIN B as b ON a.aid = b.aid;
    SQLQuery sqlQuery = this.session.createSQLQuery(sql).addEntity(A.class);
    List list = sqlQuery.list();
      

  7.   

    还是不行,
    还有,我想用HQL语句来实现,因为封装在了一个公共的类里了。
      

  8.   

    赞同,楼上写的不错,当然分开写也可以,只是楼上的那个addEntity(A.class)没有用过
      

  9.   

    只能返回object数组吧!!
    方法嘛
    用join或是多表查询都可以
      

  10.   

    一对多的话在one端的实体类中再建一个B类的集合List<B> blist = new ArrayList<B>(0);映射文件中加入<bag></bag>标签;many端的实体类中加入A的引用,映射文件中加入many-to-one标签,这个样子通过类的导航就很可以很轻松的查出你想要的东西了