在Hibernate框架中,多表查询是一种常见的数据检索方式,尤其在处理关联关系的数据表时,能够更有效地获取所需信息。与SQL的嵌套查询不同,Hibernate并不直接支持嵌套查询,这主要是因为其基于对象关系映射(ORM)的设计理念,倾向于将数据库操作转化为对Java对象的操作,而不是直接生成SQL语句。 多表查询在Hibernate中的实现通常依赖于以下几点: 1. **关联映射**:首先,你需要在实体类的定义中使用`@ManyToOne`、`@OneToMany`、`@ManyToMany`等注解来表示实体之间的关系。这些注解告诉Hibernate如何在Java对象和数据库表之间建立连接。 2. **懒加载和检索策略**:默认情况下,Hibernate采用懒加载策略,即在第一次访问关联对象时才会进行查询。你可以通过设置`fetch`属性或`@Fetch`注解来控制加载时机和方式,例如`FetchType.LAZY`或`FetchType.EAGER`。 3. **Join查询**:Hibernate提供了一种称为“Join”的查询方式,用于一次性从多个关联表中获取数据。你可以使用`Query` API的`join()`或`innerJoin()`方法,或者在HQL(Hibernate Query Language)中使用`from`关键字,如`from A left outer join B on A.id = B.parentId`。 4. **Criteria API**:Hibernate Criteria API提供了更灵活的查询构建机制,可以动态构造复杂的多表查询条件。通过`createCriteria()`方法获取Criteria对象,然后添加`join()`或`createAlias()`方法来连接表。 5. **Criteria HQL**:结合Criteria API和HQL,可以编写更高级的多表查询,如`criteria.createAlias("table2", "alias").add(Restrictions.eq("alias.column", value))`。 6. **EntityGraph**:对于深层次的关联,Hibernate 5及以上版本引入了`EntityGraph`特性,可以预先定义查询路径,减少N+1问题,提高性能。 7. **Subselect和DetachedCriteria**:虽然不推荐,但在某些特定场景下,可以使用`DetachedCriteria`或子查询(Subselect)来实现多表查询,但这可能导致性能问题,并且不如上述方法直观。 为了在Hibernate中实现多表查询,你需要了解并掌握如何正确地配置关联映射、选择合适的加载策略以及利用Hibernate提供的各种查询API和特性。通过合理的查询设计,可以优化代码结构,提高数据检索的效率和性能。
<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>
<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>
剩余9页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/5a46f3d5c44d451f8d86aa05c8add2a5_u014278225.jpg!1)
- 粉丝: 0
- 资源: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)