文档章节

在Hibernate环境下对大型集合的处理

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 670
阅读 4
收藏 0
点赞 0
评论 0

在Hibernate环境下,对大型集合的访问管理是一个非常值得重视的问题。一次将大型集合加载到内存是不能容忍的。因此在操作这种集合时要特别小心。下面给出一些建议。

1.使用@org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.EXTRA)注解大型集合,确保在访问集合的size(),isEmpty(),contains()方法时不会导致整个集合载入内存。这个方法的作用有限,如果调用add(),remove()等方法时,这个集合还是会加载出来。

2. 反向bag和list集合是性能最高的。这一点体现在使用collection.add()或collection.addAll()时也不会导致整个集合加载。(注意:必须是反向集合)。但是考虑到bag集合的种种缺点,这一点可利用的价值也不大。

3. 避免一切可能导致整个集合被一次性加载出来的操作。这需要在集合的宿主对象上屏蔽该集合的get方法,禁止外部直接获取该集合的引用。

4. 如果集合被封装到宿主对象内部,那么如果需要向集合add/remove/update元素,应该怎样处理呢?这是一个值得仔细考虑的问题。目前我倾向于这样处理:如果元素是聚合根,那么我们应该独立对它进行CRUD,宿主对象就不再提供add/remove/update方法了。如果是非聚合根,特别是值对象,对他们的CRUD往往是直接由它们的宿主对象来实现的。这时需要宿主对象提供 add/remove/update 方法,这些方法会通过domain event模式将对象直接持久化到数据库。注意:这里不存在级联的说法。任何通过java collection add/remove/update 元素的做法都会导致整个集合被加载。这是不能容许的。

 

5.对于DataAccessBasedCollection和普通集合的取舍

如果我们舍弃通过普通集合来映射多端实体,那将让我们失去hibernate提供的对这些集合处理的所有好处,比如:缓存,级联操作等等。

如果要对大型集合做映射,一定要控制对这些集合的任意访问。如果某些操作需要通过集合来完成, 比如CRUD集合中的元素,或是遍历集合找出某些特定的元素,这操作是不适宜由领域对象来完成了,即使它们可能带有一定的业务逻辑。这些操作可能会通过某些service方法来单独处理吧?

本文转载自:http://blog.csdn.net/bluishglc/article/details/5574070

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
Hibernate缓存与集合性能分析

Hibernate作为一个应用级的数据访问层封装,只能在其作用范围内保持cache中数据的有效性,如果系统与第三方系统共享数据库的情况下,Hibernate的Cache机制可能失效。 Hibernate在本地JVM中维...

疯子船长 ⋅ 2015/10/26 ⋅ 0

Hibernate提升性能

导读:   20.1. 抓取策略(Fetching strategies)   抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对...

wsl_Mr ⋅ 2013/07/24 ⋅ 1

最全java学习路线图 java学习指南

JavaEE学习路线图 准备篇 适用/适合人群:适合基础小白 目标:掌握JavaSE。 ●技术点小节: 1.开发工具的安装配置的介绍 2.JDK安装 3.DOS环境编程 4.Eclipse的安装使用 ●JAVA基础 1.基本的语...

耳东陈_f1e5 ⋅ 01/14 ⋅ 0

SSH的几个面试题儿

Struts2 1. 为什么每次请求都要创建一个Action对象? 是出于,每次请求的时候都会创建一个action的实例,这样会保证线程的安全。。 2. ModelDriven拦截器的配置中refreshModelBeforeResult解...

陶邦仁 ⋅ 2014/12/21 ⋅ 0

使用Hibernate进行大数据量的性能测试

近日为是否在项目中使用Hibernate进行大数据量的性能测试,有一些总结, 1) 在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hiber...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Hibernate Spring 面试题

关于PreparedStatement和Statement具体区别 (1) PreparedStatement是,而Statement则,在DBMS中处理管理中,而PreparedStatement则不要。(2) PrepareStatement中执行的SQL语句中是,而。比如...

陶邦仁 ⋅ 2014/12/21 ⋅ 0

ssh集合认识

Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8...

heiyexue ⋅ 2014/07/31 ⋅ 0

Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD ⋅ 2016/12/01 ⋅ 0

第二部分:Spring,hibernate,struts的面试笔试题

Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8...

小梅菜鸟 ⋅ 2012/02/26 ⋅ 0

Hibernate性能优化

在进行Hibernate性能优化时,需要从以下几个方面进行考虑: ◆数据库设计调整。 ◆HQL优化。 ◆API的正确使用(如根据不同的业务类型选用不同的集合及查询API)。 ◆主配置参数(日志、查询缓存...

Kerry_Han ⋅ 2013/08/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 22分钟前 ⋅ 0

数据仓库技术概述(一看就是架构师写的,对我极其有用)

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于...

gulf ⋅ 24分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 25分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 29分钟前 ⋅ 0

vue获取input输入框的数据

用惯了jQuery,突然使用vue感觉很不习惯,有很多不同的地方,感觉是两个不同的思想来写前端的代码。jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作。而Vue则是通过...

王子城 ⋅ 31分钟前 ⋅ 0

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaSc...

柳猫 ⋅ 36分钟前 ⋅ 2

git cmd git bash

刚用到了Git,看到windows环境下有两个命令输入窗口 第一个是可视化图形界面,第二个是CMD,第三个是Bash。 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的...

东东笔记 ⋅ 38分钟前 ⋅ 0

分布式系统CAP和Base

1、分布式系统 1.1 简介 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的...

xixingzhe ⋅ 49分钟前 ⋅ 0

查看磁盘占用情况

记一次jenkins构建失败的问题 Build step 'Send build artifacts over SSH' changed build result to UNSTABLE 网上查资料都没明确表明是什么错,回忆之前处理这样的问题。第一时间想到的是不...

ManderSF ⋅ 51分钟前 ⋅ 0

数据库管理提速:SQL解析的探索与应用

前言: SQL解析是一项复杂的技术,一般都是由数据库厂商来掌握,当然也有公司专门提供SQL解析的API。SQL解析与优化是属于编译器范畴,和C语言等其他语言的解析没有本质的区别。其中分为词法分...

java高级架构牛人 ⋅ 58分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部