注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

Hibernate 使用关键  

2009-11-10 14:29:48|  分类: hibernate |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
什么时候需要重定义equals和hashCode方法(EqualsBuilder,HashCodeBuilder):
    1,特定领域中的逻辑规则;2,Java Collection通过hashCode/equals方法判定两个对象是否相等,set集合中不允许出现重复的元素;3,定义了基于实体类属性的复合主键后,Hibernate要求复合主键类实现equals和hashCode方法,以作为不同数据之间识别的标志。

Hiberante中缓存发挥作用的情况:
1,通过id加载数据时
session.load();和session.iterate();--->类似一个load循环。
2,延迟加载。

一级缓存:
存在于session中由session管理,生命周期同session,采用Map方式实现。key-->id,value-->实体对象。需要通过session加载某个数据对象,session首先会根据锁要加载的数据类和id,在ectitiesByKey中寻找是否已有此数据的缓存实例,如果存在且其状态判定为有效,则以此数据实例作为结果返回。
session.evict();
session.clear();
二级缓存:
生命周期同SessionFactory,同一级缓存实现方式--采用Map方式实现。key-->id,value-->实体对象。-----根据id获得对象的查询。
查询缓存:
专门针对各种查询操作进行缓存。生命周期同SessionFactory,采用Map方式实现。key-->根据查询的语句、查询的条件、查询的参数和查询的页数等信息组成。value分两种方式:(1),使用select语句只查询实体对象的某些列或者某些实体对象列的组合时,value为整个结果集。(2),查询结果为某个实体对象集合时,value为实体对象id集合放到查询缓存中,同时整个结果集放到class缓存(也就是二级缓存),key-->id,value-->pojo对象。

查询方法与缓存:
get():一级缓存--〉查询数据库。
load():一级缓存--〉二级缓存--〉查询数据库。
list():直接运行查询结果所需要的查询语句。(1条SQL语句)。只能使用二级缓存中的查询缓存而无法使用二级缓存对单个对象的缓存。一次获得所有结果集对象并初始化所有的结果集对象。
iterator():先执行得到对象id的查询,再根据每个id值去取所要查询的对象。(可能1+N条SQL语句)。可以充分利用二级缓存,根据id在缓存中检索对象。执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。
  评论这张
 
阅读(410)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017