<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<meta content="width=device-width,user-scalable=no" name="viewport">
<meta name="apple-itunes-app" content="app-id=425349261">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Hibernate多表查询 - CSDN博客</title>
<link rel="Stylesheet" type="text/css" href="./Hibernate多表查询 - CSDN博客_html/9419204.css">
<script type="text/javascript" async="" src="./Hibernate多表查询 - CSDN博客_html/11786579.js"></script><script src="./Hibernate多表查询 - CSDN博客_html/2885198.js" type="text/javascript"></script>
</head>
<body>
<div id="wrap">
<div id="header">
<a class="home" href="http://www.csdn.net/"><img src="./Hibernate多表查询 - CSDN博客_html/5413934.png"></a>
<a class="logo" href="http://m.blog.csdn.net/">
<img src="./Hibernate多表查询 - CSDN博客_html/3826924.jpg"></a>
<a id="loginname" href="http://m.blog.csdn.net/account/login">登录</a>
</div>
<div id="nav">
<a href="http://m.blog.csdn.net/" id="shouye1">首页</a>
<a href="http://m.blog.csdn.net/column/index" id="zhuanlan1">专栏</a>
<a href="http://m.blog.csdn.net/People/index" id="zhuanjia1">专家</a>
<a href="http://m.blog.csdn.net/home/hot" id="rewen1">热文</a>
</div>
<div id="main">
<div id="top">
<div class="avatar">
<a href="http://m.blog.csdn.net/blog/JAVAZHICHIZHE" class="name">JAVAZHICHIZHE的专栏</a>
</div>
<div class="content">
<h1><a href="http://m.blog.csdn.net/blog/javazhichizhe/6472280#">[原]Hibernate多表查询</a></h1>
<p class="time"><span>2009-8-12</span><span>阅读5656</span> <a href="http://m.blog.csdn.net/blog/javazhichizhe/6472280#comment">评论<span id="sp_cmt">2</span></a></p>
<div id="articlecontent">
<p> Hibernate多表查询并不难, 有两种方式:</p>
<p> 1、 配置hibernate文件 : Mapping关系写在配置文件中的</p>
<p> 2、 像写SQL语句一样 : select a, b, c from A a left join fetch a.b as b left join fetch a.c as c <br>
where ... </p>
<p> ——————我现在的问题是如何将这些从多个表中查询出来的数据显示在JSP页面 (含分页的情况)?</p>
<p> a 、 比如我要查询两个表分别为表A, 表B。 如果我直接是查询出这两个相对应的POJO对象, 那么我在JSP页面改如何显示呢? 如果只有一个POJO对象的话那么我就可以javaBean里面定义一个List然后让它接收查询出来的结果集, 再在JSP页面调用迭代标签将我要显示的字段输出... .... 但是面对多个POJO对象的情况呢? </p>
<p> b、 直接从多个表中查询出我所需要的字段, 如我的:</p>
<p>select f, d.name from Donated d inner join d.donateinfos f " + "where d.id="+contribute.getDonatedid()。 这样子返回的List中存放的是一个个Object[]。这样子又该如何显示呢?</p>
<p> 如果不考虑到分页倒不是难, 要涉及分页的话这个显示还真有点点问题...... 思索中ING......</p>
<p> 我想直接将接收到Object[]进行相应的转换, 如:</p>
<p> List result = q.list(); <br>
Iterator it = result.iterator(); <br>
while (it.hasNext()) { <br>
Object[] tobj = (Object[]) it.next(); <br>
Donateinfo info = (Donateinfo) obj[ 0 ]; <br>
String d.name = (String) obj[ 1 ]; <br>
} </p>
<p> ^_^ ^_^ 但这还是 “打印版” 的, 也即如何在jsp页面显示的问题仍没有解决。</p>
<p>或者是构造出自己的Bean , 让其包含查询结果集中的所有对象, 如:</p>
<p> select MyBean(f, d.name) from Donated d inner join d.donateinfos f " + "where d.id="+contribute.getDonatedid()。这样子我们只要构造相应的MyBean()即可以了。 </p>
<p> ^_^ ^_^ 但是经测试, 这个方法只适合于返回单条记录............</p>
<p> ——————————————————网上找到一个解决方法————————————————————</p>
<p> <font face="Verdana" color="#555555">比如一个统计顾客在2005年的消费总金额的SQL操作如下:<br>
select b.name, count(a.fee) mix(a.chargeBeginTime) max(a.chargeEndTime) from charge a, customer b where a.idCustomer = b.idCustomer and a.chargeBeginTime >= '2005-01-01' and a.chargeEndTime < '2005-12-31' gourp by a.idCustomer<br>
customer表和charge结构如下:<br>
customer表结构:<br>
+------------+-------------+------+-----+---------+-------+<br>
| Field | Type | Null | Key | Default | Extra |<br>