电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPTX文档下载
分享到微信 分享到微博 分享到QQ空间

注解的实体关联映射 Hibernate的缓存机制

  • 资源ID:48594324       资源大小:89.72KB        全文页数:21页
  • 资源格式: PPTX        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

注解的实体关联映射 Hibernate的缓存机制

Hibernate第五天注解的实体关联映射 Hibernate的缓存机制单向的one-to-manyOneToMany注解:是指示在多的一方使用1的一方 的主键作为其外键,关联1的一方 JoinColumn指明在多的一方关联1的一方的外键名称单向的many-to-oneManyToOne JoinColumn 在多的一方引用1的一方的变量getter方法上加上以上 两个注解 ManyToOne表示在本类对应的数据库表中生成关联 1的一方主键的外键 其中JoinColumn中的name表示当前实体bean对应 的数据库表与1的一方的数据库表关联的外键名称双向的one-to-many在1的一方,使用OneToMany注解 其中mappedBy的值对应另一方对本实体bean的引用 变量 在多的一方,使用ManyToOne注解和JoinColumn 注解,其中JoinColumn指示在多的一方对应的数据 库表中生成外键关联1的一方。双向many-to-manyManyToMany注解 JoinTable在双向Many-to-Many关系映射中,包含两方面,拥有方和被拥有方(inverse一方)。 在拥有方指明通过哪张表来和被拥有方维护映射关系。 被拥有方使用ManyToManyCascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的 数据是实时的,在用实体中的数据之前就可以调用一下refresh()方法! CascadeType.REMOVE:级联删除,当调用remove()方法删除A实体时会先级联删除B 的相关数据! CascadeType.MERGE:级联更新,当调用了Merge()方法,如果A中的数据改变了会相 应的更新B中的数据, CascadeType.PERSIST:级联保存,当调用了Persist() 方法,会级联保存相应的数据 CascadeType.ALL:包含以上所有级联属性。什么是缓存缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能。Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命 中“),则就直接把命中的数据作为结果加以利用,避免了大量发送SQL语句到数据库查询的性能损耗。缓存策略供应商提供了HashTable缓存,EHCache,OSCache,SwarmCache,jBoss Cathe2,这些缓存机制,其中EHCache,OSCache是不能用于集群环境(Cluster Safe)的,而SwarmCache,jBoss Cathe2是可以的。HashTable缓存主要是用来测试的,只能把对象放在内存中, EHCache,OSCache可以把对象放在内存(memory)中,也可以把对象放在硬盘(disk)上。缓存分类一、Session缓存(又称作事务缓存,一级缓存):Hibernate内置的,不能卸除。缓存范围:缓存只能被当前Session对象访问。缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期。二、SessionFactory缓存(又称作应用缓存,二级缓存):使用第三方插件,可插拔。缓存范围:缓存被应用范围内的所有session共享,不同的Session可以共享。这些session有可能是并发访问缓存,因此必须对缓存进行更新。缓存的生命周期依赖于应用的生命周期,应用结束时,缓存也就结束了生命周期,二级缓存存在于应用程序范围。一级缓存的管理和使用数据放入缓存:1. save()。当session对象调用save()方法保存一个对象后,该对象会被放入到session的缓存中。2. get()和load()。当session对象调用get()或load()方法从数据库取出一个对象后,该对象也会被放入到 session的缓存中。3. 使用HQL和QBC等从数据库中查询数据。一级缓存的清除1. evict()将指定的持久化对象从缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象。 2. clear()将缓存中的所有持久化对象清除,释放其占用的内存资源。其他操作1. contains()判断指定的对象是否存在于缓存中。2. flush()刷新缓存区的内容,使之与数据库数据保持同步。二级缓存的配置、管理和使用当我们重启一个Session,第二次调用load或者get方法检索 同一个对象的时候会重新查找数据库,会发select语句信 息。 原因:一个session不能取另一个session中的缓存。性能上的问题:假如是多线程同时去取Category这个对象 ,load一个对象,这个对像本来可以放到内存中的,可是 由于是多线程,是分布在不同的session当中的,所以每次 都要从数据库中取,这样会带来查询性能较低的问题。解决方案:使用二级缓存。二级缓存1.什么是二级缓存?SessionFactory级别的缓存,可以跨越Session存在,可以被多个Session所共享。2.适合放到二级缓存中:(1)经常被访问(2)改动不大(3)数量有限(4)不是很重要的数据,允许出现偶尔并发的数据。 这样的数据非常适合放到二级缓存中的。用户的权限:用户的数量不大,权限不多,不会经常被改动,经常被访问。实现原理Hibernate如何将数据库中的数据放入到二级缓存中?注意,你可以把缓存看做是一个Map对象,它的Key用于存储对象OID,Value用于存储POJO。首先,当我们使用Hibernate从数据库中查询出数据,获取检索的数据后,Hibernate将检索出来的对象的OID放入缓存中key 中,然后将具体的POJO放入value中,等待下一次再次向数据查询数据时,Hibernate根据你提供的OID先检索一级缓存,若有且配置了二级缓存,则检索二级缓存,如果还没有则才向数据库发送SQL语句,然后将查询出来的对象放入缓存中。开启二级缓存1、修改hibernate.cfg.xml: true org.hibernate.cache.ehcache.EhCacheRegionFactory在实体类中加入注解需要导包: liboptionalehcache ehcache-core-2.4.3.jar liboptionalehcache hibernate-ehcache-4.3.7.Final.jar liboptionalehcache slf4j-api-1.6.1.jar 在实体类中通过注解可以配置使用二级缓存: Cache(usage = CacheConcurrencyStrategy.READ_WRITE) Load默认使用二级缓存,就是当查一个对象的时候,它先会去二级缓存里面 去找,如果找到了就不去数据库中查了。 Iterator默认的也会使用二级缓存,有的话就不去数据库里面查了,不发送 select语句了。 List默认的往二级缓存中加数据,假如有一个query,把数据拿出来之后会放 到二级缓存,但是执行查询的时候不会到二级缓存中查,会在数据库中查。原因每个query中查询条件不一样。也可以在需要被缓存的对象中hbm文件中的标签下添加一个子标签: seq_part_hql 存在一对多的关系,想要在在获取一方的时候将关联 的多方缓存起来,需要在下面几个位置添加添加 子标签,不然Hibernate只会缓存OID。 位置0、一的一方在hbm中的下面添加 位置1、一的一方在hbm中的集合下面添加 位置2、多的一方在hbm中的下面添加查询缓存的配置、管理和使用1、查询缓存及应用的场合 它是针对HQL语句的缓存(只在以HQL方式进行查询时产生) 不适用于数据变更频繁、查询条件相同的场合2、启用查询缓存 Hibernate的查询缓存默认是关闭的,可以通过下面的操作打开: 在hibernate.cfg.xml中: true1、在执行query.list()方法查询时首先检查是否配置了查询缓存,如果配置了则从查询缓存中查找key为“查询语句+查询参数+分页条件“的值,如果获取不到则从数据库进行获取。2、hibernate根据这些信息组成一个query key,query key包括条件查询请求的一般信息:SQL、SQL需要的参数、记录范围(起始位置rowStart,最大记录个数maxRows)等3、hibernate根据这个query key到查询缓存中查找对应的结果列表,如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据query key放到查询缓存中。4、Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空。

注意事项

本文(注解的实体关联映射 Hibernate的缓存机制)为本站会员(ldj****22)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.