网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  方便的hql: hibernate查询语言     
  文章作者:未知  文章来源:水木森林  
  查看:74次  录入:管理员--2007-11-17  
 
  hql: hibernate查询语言 hibernate配备了一种非常强大的查询语言,这种语言看上去很像sql。但是不要被语法结构 上的相似所迷惑,hql是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。
  
  15.1. 大小写敏感性问题
  
  除了java类与属性的名称外,查询语句对大小写并不敏感。 所以 select 与 select 以及 select 是相同的,但是 org.hibernate.eg.foo 并不等价于 org.hibernate.eg.foo 并且 foo.barset 也不等价于 foo.barset。
  
  本手册中的hql关键字将使用小写字母. 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强, 但我们发现,当把查询语句嵌入到java语句中的时候使用大写关键字比较难看。
  
  15.2. from子句
  
  hibernate中最简单的查询语句的形式如下:
  
  代码内容
  from eg.cat
  
  该子句简单的返回eg.cat类的所有实例。 通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况。 所以我们几乎只使用如下的简单写法:
  
  代码内容
  from cat
  
  大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到cat
  
  代码内容
  from cat as cat
  
  这个语句把别名cat指定给类cat 的实例, 这样我们就可以在随后的查询中使用此别名了。 关键字as 是可选的,我们也可以这样写:
  
  代码内容
  from cat cat
  
  子句中可以同时出现多个类, 其查询结果是产生一个笛卡儿积或产生跨表的连接。
  from formula, parameter
  from formula as form, parameter as param
  
  查询语句中别名的开头部分小写被认为是实践中的好习惯, 这样做与java变量的命名标准保持了一致 (比如,domesticcat)。
  
  15.3. 关联(association)与连接(join)
  
  我们也可以为相关联的实体甚至是对一个集合中的全部元素指定一个别名, 这时要使用关键字join。
  
  代码内容
  from cat as cat
  inner join cat.mate as mate
  left outer join cat.kittens as kitten
  from cat as cat left join cat.mate.kittens as kittens
  from formula form full join form.parameter param
  
  受支持的连接类型是从ansi sql中借鉴来的。
  inner join(内连接)
  left outer join(左外连接)
  right outer join(右外连接)
  full join (全连接,并不常用)
  
  语句inner join, left outer join 以及 right outer join 可以简写。
  
  代码内容
  from cat as cat
  join cat.mate as mate
  left join cat.kittens as kitten
  
  还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations). 查看 第 20.1 节 “ 抓取策略(fetching strategies) ” 以获得等多的信息。
  
  代码内容
  from cat as cat
  inner join fetch cat.mate
  left join fetch cat.kittens
  
  一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。
  
  注意fetch构造变量在使用了scroll() 或 iterate()函数 的查询中是不能使用的。最后注意,使用full join fetch 与 right join fetch是没有意义的。
  
  如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all properties 来强制hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
  
  代码内容
  from document fetch all properties order by name
  from document doc fetch all properties where lower(doc.name) like ’%cats%’
 
 
上一篇: hibernatetool生成mapping文件工具    下一篇: java基础知识:简单hibernate入门
  相关文档
在linux环境中用php连接oracle数据库 11-17
分析 java 中乱码问题产生的根源 11-17
java 5 特性 instrumentation 实践 11-17
编写跨平台java程序注意事项 11-17
collections api定制实现(一) 11-16
jbuilder+webservice之实战分析 11-17
struts menu中基于角色的权限管理 11-17
java语言深入:c#与java相似之处的对比 04-25
强!java实现msn messenger聊天 11-16
hibernate 深入研究之 criteria 11-17
java编码中的一些经验和教训 11-17
使tostring()的创建自动化 11-17
java中 中文问题详解 11-17
将form保存到图片中 11-17
跟你分享——.net项目制作安装程序 11-17
自己写的一个未成熟的数据库连接池(一) 11-17
windows xp系统下安装apache+php+mysql 06-26
java入门与加深(上)(1) 11-16
对于模式的“十大误解” 11-17
java学习过程的一些重点(二) 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息