赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Java应用中Hibernate对多表关联查询的总结

发布时间:2008.04.10 05:05     来源:赛迪网    作者:黄明

【赛迪网技术报道】由于公司项目的需要,我对Hibernate对多表关联查询研究了一下,现总结如下,供朋友参考。

一、 Hibernate简介Hibernate是一个JDO工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必向传统的JDBC访问方式一样把结果集的数据逐个装载到一个值对象中,为编码工作节约了大量的时间。Hibernate提供的HQL是一种类SQL语言,它和EJBQL一样都是提供对象化的数据库查询方式,但HQL在功能和使用方式上都非常接近于标准的SQL.

二、 Hibernate与JDBC的区别Hibernate与JDBC的主要区别如下:

1、 Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,从某种意义上来说,Hibernate在任何场合下取代JDBC.

2、 Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

3、 Hibernate是做为JDBC的替代者出现的,不能用来直接和Entity Bean做对比。

三、 Hibernate 进行多表关联查询Hibernate对多个表进行查询时,查询结果是多个表的笛卡尔积,或者称为“交叉”连接。 例如:from Student, Book from Student as stu, Book as boo from Student stu, Book boo注意:让查询中的Student和Book均是表student和book对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和Java对局部变量的命名规范是一致的。

下面列举一个完整的例子来说明Hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tBookInfo和BookSelection的结构和其对应的hbm.xml、class文件就不一一列举了,有需要详细了解的朋友,请联系我):

String sTest = "from tBookInfo book, BookSelection sel where book.id = sel.bookId";

Collection result = new ArrayList();

Transaction tx = null;

try {

Session session = HibernateUtil.currentSession();

tx = session.beginTransaction();

Query query = session.createQuery(sql);

result = query.list();

tx.commit();

} catch (Exception e) {

throw e;

} finally {

HibernateUtil.closeSession();

}

ArrayList sList = (ArrayList) result;

Iterator iterator1 = sList.iterator();

while (iterator1.hasNext()) {

Object[] o = (Object[]) iterator1.next();

tBookInfo bookInfo = (tBookInfo) o[0];

BookSelection bookSelect = (BookSelection) o[1];

System.out.println("BookInfo-Title: " + bookInfo.getTitle());

System.out.println("BookSelection-BookSelectionId: " + bookSelect.getId());

}

(责任编辑:高爽)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 动态代理实现AOP功能 (04-09) · Java编程应用:使用动态代理实现AOP功能 (04-09)
· Java编程语言中创建和使用日期的详细介绍 (04-08) · Java编程应用:使用动态代理实现AOP功能 (04-08)
· SE6中调用编译器 (04-08) · 最容易犯的21种错误 (04-08)
· Java进阶:在SE6中调用编译器的两种方法 (04-08) · 写给程序员:从C++转到Java需注意的地方 (04-07)
· 保存Java程序状态及设置Properties文件 (04-07) · Java进阶:在SE6中调用编译器的两种方法 (04-07)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 北京新规不能霸王硬上弓 网店牌照缓期执行
· 软件外包之变的新台阶: 提高全球交付能力
· ERP案例分析 SaaS带来冲击 IT服务商面临挑战
· 通方期货CRM解决方案 房地产行业CRM解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统