随笔 - 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提供多种数据检索策略,常用的有:



立即检索



延迟检索


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



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


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



关联级别 立即检索/延迟检索 延迟检索 影响Sessionload()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 阅读(126) 评论(0)  编辑  收藏


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


网站导航: