随笔 - 0, 文章 - 75, 评论 - 0, 引用 - 0
数据加载中……

HQL进阶

HQL优化


避免or操作


where
子句包含or
操作,执行时不使用索引


from
House
where
street_id
=
'1000'
or
street_id
=
'1001'


可以使用in条件来替换


from
House
where
street_id
in
('1001','1000')



避免使用not


where
子句包含not
关键字,执行时该字段的索引失效


from House as h where
not
(h.price
>1800)


使用比较运算符替换not


from
House as h
where
h.price
<=
1800



避免like的特殊形式



查询时,尽可能少使用
like


避免having子句


尽可能在where
子句中指定条件


避免使用distinct


在不要求或允许冗余时,应避免使用distinct



Hibernate数据检索策略


Hibernate提供多种数据检索策略,常用的有:



立即检索



延迟检索


不同检索策略的作用域及默认检索策略



作用域 可选的检索策略
默认的检索策略 运行时行为受影响的检索方法


类级别 立即检索/延迟检索 延迟检索 仅影响Session的load()方法



关联级别 立即检索/延迟检索 延迟检索 影响Session的load()和get()




检索策略的运行机制



类型


立即检索


类级别


立即加载检索方法指定的对象


关联级别


立即加载与检索方法指定的对象关联的对象,可以设定批量检索数量


优点


对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象缺点


(1)select语句数目多


(2)可能会加载应用程序不需要访问的对象,造成内存空间的浪费


---------------------------


类型


延迟检索


类级别


延迟加载检索方法指定的对象


关联级别


延迟加载与检索方法指定的对象关联的对象,可以设定批量检索数量


优点


由应用程序决定需要加载那些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。提高检索性能,节省内存空间


缺点


应用程序如果希望访问游离状态的代理类实例,必须保证它在持久化状态时已经被初始化







设定检索策略的常用属性


属性


lazy


类级别


1.<class>元素中lazy属性的可选值为:true(延迟检索)和false(立即检索)


2.
<class>
元素中lazy属性的默认值为true


一对多关联级别


1.<set>元素中lazy属性的可选值为:true(延迟检索)、false(立即检索)和extra(增强延迟检索)


2.
<set>
元素中lazy属性的默认值为true


多对一关联级别


1.<many-to-one>元素中的lazy属性的可选值为:proxy(延迟检索)、no-proxy(无代理延迟检索)和false(立即检索)


2.<many-to-one>元素中的lazy属性的默认值为true


--------------------------------------------


属性


fetch


类级别



没有此属性


一对多关联级别



1.<set>元素中fetch属性的可选值为:select(查询语句)、subselect(子查询语句)和join(迫切左外连接检索)


2.
<set>
元素的fetch属性的默认值为select


多对一关联级别



1.<many-to-one>元素中fetch属性的可选值为:select(查询语句)和join(迫切左外连接检索)


2.<many-to-one>元素的fetch属性的默认值为select



HQL 联接查询


内联接:inner
join


最典型、最常用的联接查询


两个表存在主外键关系时通常会使用内联接查询



外联接

左外联接:left
join
或
left
outer join

右外联接:right
join
或right
outer join

完整外联接:full
join
或
full
outer join


联接类型
HQL语法

内联接
inner
join
或
join

迫切内联接 inner
join fetch
或
join
fetch

左外联接 left
outer join
或
left
join

迫切左外联接 left
outer join fetch
或
left
join
fetch

右外联接
right
outer join 或

right
join

适用范围

适用于有关联关系的持久化类,并且在映射文件中对这种关联关系中作了映射


Hibernate联接语法如下


from
Entity
inner
join
[fetch]
Entity.property


from
Entity
left
join
[fetch]
Entity.property


from
Entity
right
join
[fetch]
Entity.property

posted on 2012-04-22 15:52 hantai 阅读(144) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: