您的位置:首页 > 其它

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>也一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: