hibernate中的检索策略 简单总结
2010-10-19 12:02
183 查看
关于hibernate,检索策略非常关键,主要。检索策略用得不好,访问量大时,系统不仅慢,而且可能导致数据库服务器崩溃,所以大家要慎用其检索策略,最好要了解其策略的细节。今我在这里简单总结其策略方式。
首先从类级别中来讲,load() get() find()只有load的检索策略对类级别设置lazy有作用,其他两个都采用立即检索策略。而且类级别默认配置是采用立即检索,即 lazy='false'。
再从关系级别中考虑(lazy,outer-join,batch-size),hibernate主要关系无非 One--to--One,One--to--Many,Many--to--One,Many--to--Many;
One--to--One想使用延时加载必须设置<one-to-one>元素的constrained='true' ,其余<many-to-one>中的not-null相似。
通常主要是:<many-to-one>如果想使用延时加载策略则需要在one的实体类中配置lazy='true',我觉得多对一中时常是需要找到相对应得one的实体(父亲实体),所以我推荐使用outer-join='true' 与父类实体进行迫切左外连接同时找出父类实体。<many-to-one>中outer-join默认是auto.即当one端的实体如果不是lazy='true',即采用迫切左外连接.双向关联要切记设置好检索策略,否则会检索到one一端时又会从one一端去检索many一端.
<set ><one-to-many /></set> 关系重要:默认是lazy='false' outer-join='false',正常无关到many一端时最好采用延时策略,即lazy='true' outer-join='false'。但如果还需要关联加载many一端时,最好采用迫切左外连接,即lazy='false' outer-join='true'。有时有这种需求,但是需求量又不大,不可能固定的配置,大多数还是不会关联到many一端,所以当需要关联到many一端时,最好采用编程式方式(hql,createCriteria())。
<many-to-many>也同样如此.
还有batch-size相关,假如<one-to-many>没有设置outer-join='true',且为为立即检索,采用批量抓取的话,其生成的sql语句如 select* from customers were id=1 or id=2 or id=3 or id=4 这种形式。<many-to-one>也一样。
首先从类级别中来讲,load() get() find()只有load的检索策略对类级别设置lazy有作用,其他两个都采用立即检索策略。而且类级别默认配置是采用立即检索,即 lazy='false'。
再从关系级别中考虑(lazy,outer-join,batch-size),hibernate主要关系无非 One--to--One,One--to--Many,Many--to--One,Many--to--Many;
One--to--One想使用延时加载必须设置<one-to-one>元素的constrained='true' ,其余<many-to-one>中的not-null相似。
通常主要是:<many-to-one>如果想使用延时加载策略则需要在one的实体类中配置lazy='true',我觉得多对一中时常是需要找到相对应得one的实体(父亲实体),所以我推荐使用outer-join='true' 与父类实体进行迫切左外连接同时找出父类实体。<many-to-one>中outer-join默认是auto.即当one端的实体如果不是lazy='true',即采用迫切左外连接.双向关联要切记设置好检索策略,否则会检索到one一端时又会从one一端去检索many一端.
<set ><one-to-many /></set> 关系重要:默认是lazy='false' outer-join='false',正常无关到many一端时最好采用延时策略,即lazy='true' outer-join='false'。但如果还需要关联加载many一端时,最好采用迫切左外连接,即lazy='false' outer-join='true'。有时有这种需求,但是需求量又不大,不可能固定的配置,大多数还是不会关联到many一端,所以当需要关联到many一端时,最好采用编程式方式(hql,createCriteria())。
<many-to-many>也同样如此.
还有batch-size相关,假如<one-to-many>没有设置outer-join='true',且为为立即检索,采用批量抓取的话,其生成的sql语句如 select* from customers were id=1 or id=2 or id=3 or id=4 这种形式。<many-to-one>也一样。
相关文章推荐
- Hibernate检索方式简单总结
- 框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结
- Hibernate主键生成策略简单总结
- hibernate检索策略总结
- Hibernate笔记三之检索策略、查询总结、连接池
- hibernate检索策略1
- Hibernate主键生成策略总结
- 简单总结一下Hibernate的缓存问题
- 【Hibernate】Hibernate系列5之检索策略
- Hibernate的检索策略
- Hibernate的检索策略-设定检索策略的属性
- Hibernate笔记三 主键生成策略总结
- hiebernate 学习之六(hibernate的检索策略)
- Hibernate 简单总结
- hibernate3第二章之JUNIT简单单元测试、CRUD、三种状态、主键生成策略
- hibernate检索策略 9
- Hibernate学习之路(十): hibernate 的检索策略
- Hibernate主键生成策略总结
- Hibernate的检索策略
- Hibernate复习(六)检索策略