知识大全 Hibernate的检索策略小结
Posted 知
篇首语:男儿欲遂平生志,五经勤向窗前读。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate的检索策略小结相关的知识,希望对你有一定的参考价值。
Hibernate的检索策略小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Hibernate的检索策略包括类级别检索策略和关联级别检索策略
类级别检索策略有立即检索和延迟检索 默认的检索策略是立即检索 在Hibernate映射文件中 通过在<class>上配置lazy属性来确定检索策略 对于Session的检索方式 类级别检索策略仅适用于load方法 也就说 对于get qurey检索 持久化对象都会被立即加载而不管lazy是false还是true 一般来说 我们检索对象就是要访问它 因此立即检索是通常的选择 由于load方法在检索不到对象时会抛出异常(立即检索的情况下) 因此我个人并不建议使用load检索 而由于<class>中的lazy属性还影响到多对一及一对一的检索策略 因此使用load方法就更没必要了
关联级别检索策略有立即检索 延迟检索和迫切左外连接检索 对于关联级别检索 又可分为一对多和多对多 多对一和一对一两种情况讨论
一对多和多对多关联关系一般使用<set>配置 <set>有lazy和outer join属性 它们的不同取值绝对了检索策略
)立即检索 这是一对多默认的检索策略 此时lazy=false outer join=false 尽管这是默认的检索策略 但如果关联的集合是无用的 那么就不要使用这种检索方式
)延迟检索 此时lazy=true outer join=false(outer join=true是无意义的) 这是优先考虑的检索方式
)迫切左外连接检索 此时 lazy=false outer join=true 这种检索策略只适用于依靠id检索方式(load get) 而不适用于query的集合检索(它会采用立即检索策略) 相比于立即检索 这种检索策略减少了一条sql语句 但在Hibernate中 只能有一个<set>配置成 outer join=true
多对一和一对一检索策略一般使用<many to one> <one to one>配置 <many to one>中需要配置的属性是 outer join 同时还需要配置one端关联的<class>的lazy属性(配置的可不是<many to one>中的lazy哦) 它们的组合后的检索策略如下
) outer join=auto 这是默认值 如果lazy=true为延迟检索 如果lazy=false为迫切左外连接检索
) outer join=true 无关于lazy 都为迫切左外连接检索
) outer join=false 如果lazy=true为延迟检索 否则为立即检索
可以看到 在默认的情况下(outer join=auto lazy=false) 对关联的one端对象Hibernate采用的迫切左外连接检索 依我看 很多情况下 我们并不需要加载one端关联的对象(很可能我们需要的仅仅是关联对象的id) 另外 如果关联对象也采用了迫切左外连接检索 就会出现select语句中有多个外连接表 如果个数多的话会影响检索性能 这也是为什么Hibernate通过hibernate max_fetch_depth属性来控制外连接的深度 对于迫切左外连接检索 query的集合检索并不适用 它会采用立即检索策略
cha138/Article/program/Java/ky/201311/28686相关参考
知识大全 O/R MAPPING(Hibernate)方法小结
O/RMAPPING(Hibernate)方法小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
通过以上的介绍可以看出hibernate主要从以下几个方面来优化查询性能 降低访问数据库的频率减少select语句的数目实现手段有使用迫切左外连接或迫切内连接对延迟检索或立即检索设置批量检索数目
Hibernate主键生成策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自动增长ident
常用Hibernate主键生成策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天学习到了关
Hibernate的ID生成策略是什么? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishix
Hibernate是对JDBC的轻量级封装因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低然而通过正确的方法和策略在使用Hibernate的时候还是可以非常接近直接使用JD
为了进一步优化Hibernate的性能可以使用 延迟加载技术管理数据抓取策略进行缓存管理等方面考虑来提高Hibernate的性能 延迟加载(load) 延迟加载(load)是Hibernat
关于Sphinx创建全文检索的索引介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 全文检索的
SQL实战新手入门:第十章小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 小结 与RDBM
HibernateSearch:全文检索你的领域模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!