Hibernate 抓取策略
来源:互联网 发布:淘宝刷钻平台网站 编辑:程序博客网 时间:2024/05/22 06:26
当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate 使用 抓取策略(fetching strategy) 获取关联对象。抓取策略可以在 O/R 映射的元数据中声明,也可以在特定的 HQL 或
条件查询(Criteria Query)
中重载声明。
Hibernate3 定义了如下几种抓取策略:
连接抓取(Join fetching):Hibernate 通过在
SELECT
语句使用OUTER JOIN
(外连接)来获得对象的关联实例或者关联集合。查询抓取(Select fetching):另外发送一条
SELECT
语句抓取当前对象的关联实体或集合。除非你显式的指定lazy="false"
禁止 延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条 select 语句。子查询抓取(Subselect fetching):另外发送一条
SELECT
语句抓取在前面查询到(或者抓取到)的所有实体对象的关联集合。除非你显式的指定lazy="false"
禁止延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条 select 语句。批量抓取(Batch fetching):对查询抓取的优化方案,通过指定一个主键或外键列表,Hibernate 使用单条
SELECT
语句获取一批对象实例或集合。
Hibernate 会区分下列各种情况:
Immediate fetching,立即抓取:当宿主被加载时,关联、集合或属性被立即抓取。
Lazy collection fetching,延迟集合抓取:直到应用程序对集合进行了一次操作时,集合才被抓取(对集合而言这是默认行为)。
"Extra-lazy" collection fetching,"Extra-lazy" 集合抓取:对集合类中的每个元素而言,都是直到需要时才去访问数据库。除非绝对必要,Hibernate 不会试图去把整个集合都抓取到内存里来(适用于非常大的集合)。
Proxy fetching,代理抓取:对返回单值的关联而言,当其某个方法被调用,而非对其关键字进行 get 操作时才抓取。
"No-proxy" fetching,非代理抓取:对返回单值的关联而言,当实例变量被访问的时候进行抓取。与上面的代理抓取相比,这种方法没有那么“延迟”得厉害(就算只访问标识符,也会导致关联抓取)但是更加透明,因为对应用程序来说,不再看到 proxy。这种方法需要在编译期间进行字节码增强操作,因此很少需要用到。
Lazy attribute fetching,属性延迟加载:对属性或返回单值的关联而言,当其实例变量被访问的时候进行抓取。需要编译期字节码强化,因此这一方法很少是必要的。
这里有两个正交的概念:关联何时被抓取,以及被如何抓取(会采用什么样的 SQL 语句)。注意不要混淆它们。我们使用
抓取
来改善性能。我们使用延迟
来定义一些契约,对某特定类的某个脱管的实例,知道有哪些数据是可以使用的。
- Hibernate抓取策略
- Hibernate的抓取策略
- Hibernate Fetch 抓取策略
- hibernate 抓取策略
- Hibernate中的抓取策略
- hibernate抓取策略
- Hibernate------抓取策略
- Hibernate 抓取策略
- hibernate抓取策略
- hibernate抓取策略
- hibernate---->抓取策略
- hibernate 抓取策略
- Hibernate的抓取策略
- Hibernate抓取策略
- hibernate抓取策略
- hibernate 抓取策略fetch
- Hibernate-抓取策略
- hibernate抓取策略
- Android中关于ImageView网络获取的图片的缩放问题
- PDA程序启动时找不到device.dll类库
- 程桌面进行远程管理服务器遇到远程桌面登陆服务器后显示黑屏,或无法显示桌面,如何处理?
- OpenCV中的HOG+SVM物体分类
- cvZero将数组清空为零,否则很可能是随机数
- Hibernate 抓取策略
- 复习笔记1 进制以及进制转换
- UIImageView视图内容按比例缩小并淅淅隐去
- 十七道海量数据处理面试题与Bit-map详解
- 2012-5-4 一天一总结
- jquery中:empty()和remove()区别
- Memcached客户端分布式计算算法--一致性hash算法
- 排序算法的稳定性
- Python抓取框架:Scrapy的架构