日期:2014-05-19  浏览次数:20829 次

hibernate查询数据的问题
业务有这个需求
hql查询多张表,每张表呢只需要其中部分字段(页面显示使用)如:
select a.name,a.age,b.price,b.time,c.number from A a,B b ,C c where a.id=b.id and b.time=c.time;
现在 返回一个List(有可能满足条件的有多个)。我应该怎么做才能在遍历显示出来
使用 jsp+ssh2

------解决方案--------------------
在JAVA后台的.java类里能够得到list,然后在页面上使用标签的<s:iterator。。。。。>循环取到你想要显示的就可以了
------解决方案--------------------
1、建议使用一个DTO来接数据库返回的临时表
你可以建立一个JavaBean

select a.name,a.age,b.price,b.time,c.number from A a,B b ,C c where a.id=b.id and b.time=c.time;



JavaBean


class X{
 private String aname;
 private int aage;
private double bprice;
private Date btime;
private int cnumber;
//setter and getter; 
}
查询的东西装这个DTO里就可以了。使用起来跟其他Domian没区别、
根据你的HQL来建立你需要的字段以及属性,然后在前台就好遍历了、


2、如果你不想建立DTO。可以三表联查(需要的是查三个表全部字段,只要带上条件就行)(数据量大的话、效率肯定是很差的、)、

用一个list 接就好、然后你在前台获取可以使用struts标签迭代

<s:iterator value=“你的list”var=“x”>

 a的name字段值是:<s:property value="#x[0].name"/>
 b的price字段值是:<s:property value="#x[1].price"/>
c的number字段值是: <s:property value="#x[2].number"/>

</s:iterator>






------解决方案--------------------
关于1、

你查询的时候

需要把查询的东西转型到DTO里

SQL code
select a.name as aname ,a.age as aage ,b.price as bprice,b.time as btime,c.number as cnumber from A a,B b ,C c where a.id=b.id and b.time=c.time;

------解决方案--------------------
探讨
那怎样得到各个表中的部分字段

------解决方案--------------------
在action里定义一个list,把查询得到的值放到list里,然后再页面上这样写:
<s:iterator value="list" var="bean">
<s:property value="#bean.attribute" />
...
</s:iterator>