hibernate高级应用选编.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hibernate高级应用选编

Hibernate高级应用;Hibernate事务和并发处理 Hibernate缓存策略 批量处理 延迟加载;什么是事务? 单个逻辑工作单元,它包含一系列的操作。 事务的特性(ACID) 原子性 一致性 隔离性 持久性 ;1.脏读取(Dirty Reads) 一个事务读取了另一个事务未提交的数据 2.不可重复读(Non-repeatable Reads) 一个事务再次读取之前曾读过的数据时,发现该数据已经被另一个提交的事务修改 3.虚读(幻读) 一个事务重新执行一个查询,返回一套符合条件的记录,但这些记录中包含了因为其他最近提交的事务而产生的新记录 ;1.脏读取(Dirty Reads);2.不可重复读;虚读(幻读);数据库事务管理隔离级别;Hibernate是JDBC轻量级的封装,本身不具备事务的管理能力,在事务管理层委托给底层的JDBC或JTA进行事务的管理和调度。 1. 基于JDBC的事务管理 ;JDBC的事务是有Connection管理的,事务的周期依赖于Connection的生命周期。而Session依托于Connection实现的,事务局限与session的生命周期。 提供了跨越session的事务管理能力。;Hibernate隔离级别的设置;悲观锁(perssimistic locking) 在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制。 乐观锁(optimistic locking) 乐观锁并没有对任何操作加锁,它只是在事务更新记录时,对事务进行检查,看从上一次读取这条记录后,它是否被其他事务修改. ;悲观锁是解决事务并发的一种方法,悲观锁是在更新数据时把记录锁住,防止其他事务读写这个记录. Hibernate的加锁模式有 LockMode.NONE(无锁机制) LockMode. WRITE:当向数据库中插入或更新数据时,Hibernate会自动使用这种锁。 LockMode.READ:Hibernate在读取记录时自动获取 注:以上三种机制为Hibernate 内部对数据的锁定机制,与数据库无关。 LockMode.UPGRADE:利用数据库的for update子句加锁 LockMode.UPGRADE_NOWAIT:Oralce的特定实现,利用oracle的for update nowait子句加锁 ;Hibernate提供了三种方法来检查数据是否发生了变化。 1.使用version实现乐观锁 2.使用时间戳实现乐观锁 3.对比字段值实现乐观锁 其中已使用version的方法最为常用。 步骤: 1.首先为映射文件(xx.hbm.xml)中的class节点添加 optimistic-lock属性 2.在Id节点下添??version节点 class name=“net.xabc.entity.TUser” optimistic-lock =“version” id name=“…” id version name=“version” column=“version” type=“java.lang.Integer” /class;缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。 ORM缓存策略 1.事务级缓存(session level cache) session生命周期的缓存,关闭session即消亡 2.应用级/进程级缓存(sessionFactory level cache) 某个应用中的共享缓存,多个事务可以共享,在sessionFactory层实现,所有sessionFactory创建的session可以共享. 3.分布式缓存 多个JVM共享的缓存,通过远程机制实现缓存数据同步,任意实例修改数据,所有的JVM都要更新缓存. ;1.内部缓存(session level) 一级缓存是事务级的缓存,session中维护的一个Map,Map的key是包含了数据类型和id,从数据库加载的数据都会进入Map缓存中,通过session加载数据时会先在session缓存里找,一级缓存是session的private数据,session实例消亡就清除了,在应用中就保持在一次请求的开始和结束之间. 一般由Hibernate自动维护,也支持手动维护 session.evit(Object obj) 将持久化对象从一级缓存中清除. session.clear() ?清空一级缓存 session.contains(Object obj) 判断指定的对象是否存在于一级缓存中.? session.flush() 刷新一级缓存区的内容,使缓存与数据库数据保持同

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档