hibernate语句【DOC精选】.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hibernate语句【DOC精选】

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。 第?15?章?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立即取得那些原本需要延迟

文档评论(0)

taotao0b + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档