zoukankan      html  css  js  c++  java
  • hibernate检索策略总结

       大致说来,hibernate提供了3中检索策略:

    1、立即检索:在<class> , <set> ,和<many-to-one>元素中,”lazy“属性设为false,即立即加载,

    2、延迟检索:在<class>元素中,lazy=true;在<set>中,lazy=true或者extra;在<many-to-one>中,lazy为“proxy”或者“no-proxy”。

    3、迫切做外连接检索:在<set>和<many-to-one>元素中,fetch=“join”。class中无此属性。

    一般来说,立即检索(lazy=false)会加载所有关联对象,并执行其关联语句,有时有必要,有时则没有必要,在性能上比较吃紧,所以一般使用它时,一定要注意使用场景和需求。

    延迟检索(lazy=true),不会加载器关联对象,性能较高,但在加载关联对象属性时,会报错。

    迫切做外连接(fetch=_)会加载关联对象,并只执行一条关联语句,在特定情况下使用。

    在<class>   <property>  <set>和<many-to-one>中都有lazy属性,他们的默认值依次为:true,false,true,proxy。

    下面是几种策略的优缺点的比较,以及各自适用的场合。

    检索策略 优点 缺点 优先考虑使用的场合
    立即检索 由程序决定加载的对象,可以避免多个select语句,避免去加载不需要访问的关联对象,以此提高检索性能。 (1)select语句数目多(2)可能加载不需要访问的对象,浪费内存空间 (1)类级别(2)应用程序需要立即访问的对象(3)使用了二级缓存
    延迟检索 对应用程序完全透明,不管对象处于持久态还是游离态,应用程序都可以方便的从一个对象导航到他的关联对象。
    程序访问其关联对象属性时,不能保证其是否在持久化时已经被初始化。

    (1)一对多或者多对多关联(2)应用不需要立即访问的对象。
    迫切做外连接检索 综合以上两种检索方式的优点。 (1)可能加载不需要访问的关联对象。(2)复杂的数据库表连接会影响性能。 (1)多对一或者一对一关联(2)程序需要立即访问的对象(3)数据库系统有良好的表连接性能
       
           
  • 相关阅读:
    Web网站架构演变—高并发、大数据
    企业级Nginx Web服务优化实战
    初始化mysql数据库时提示字符编码错误的解决办法
    linux下logrotate 配置和理解
    Centos 5.2下安装多个mysql数据库
    编译安装 mysql 5.5,运行 cmake报错Curses library not found
    Centos 5.5 编译安装mysql 5.5.9
    理解索引的基数
    centos下yum安装mysql5.6后,无法启动 MySQL Daemon failed to start
    如何从MySQL官方Yum仓库安装MySQL5.6
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3127512.html
Copyright © 2011-2022 走看看