温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hibernate查询语言怎么使用

发布时间:2021-12-06 09:11:45 来源:亿速云 阅读:98 作者:iii 栏目:编程语言

这篇文章主要介绍“Hibernate查询语言怎么使用”,在日常操作中,相信很多人在Hibernate查询语言怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate查询语言怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Hibernate配备了一种非常强大的Hibernate查询语言,这种语言看上去很像SQL。本文主要介绍大小写敏感性问题、from子句、关联(Association)与连接(Join)等。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

1. 大小写敏感性问题

除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等价于 org.hibernate.eg.Foo 并且 foo.barSet 也不等价于 foo.BARSET。

本手册中的HQL关键字将使用小写字母. 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强, 但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。

2. from子句

最简单的Hibernate查询语句的形式如下:

from eg.Cat

该子句简单的返回eg.Cat类的所有实例。 通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况。 所以我们几乎只使用如下的简单写法:

from Cat

大多数情况下, 你需要指定一个别名, 原因是你可能需要 在Hibernate查询语言的其它部分引用到Cat

om Cat as cat

这个语句把别名cat指定给类Cat 的实例, 这样我们就可以在随后的查询中使用此别名了。 关键字as 是可选的,我们也可以这样写:

from Cat cat

子句中可以同时出现多个类, 其查询结果是产生一个笛卡儿积或产生跨表的连接。

from Formula, Parameter  from Formula as form, Parameter as param

    查询语句中别名的开头部分小写被认为是实践中的好习惯, 这样做与Java变量的命名标准保持了一致 (比如,domesticCat)。

    3. 关联(Association)与连接(Join)

    Hibernate查询语言,我们也可以为相关联的实体甚至是对一个集合中的全部元素指定一个别名, 这时要使用关键字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). 查看 第 19.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%'

    到此,关于“Hibernate查询语言怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI