Hibernata的特点
来源:互联网 发布:git mac客户端 编辑:程序博客网 时间:2024/05/01 04:29
- Hibernata是一种开放源代码的对象/关系映射持久层框架。
- 事务处理,生命周期管理不依赖于J2EE容器。
- 解决数据库的方言问题。
- hibernata只需要操作对象就可以完成数据库的增,删,改,查。使用hibernata更面向对象。
- 轻量级,无侵入性,移植性好。
- ssh:
- struts:撑杆
- hibernate:冬眠
- spring:春天
- hibernate不适用批量对对象进行操作,使用数据库特定映射,表间关系很复杂时,会造成性能问题。
- 主键生成策略
- increment自动增长,其主键由hibernate控制,数据库中相应的字段没有设置自动增长,不能用于集群。
- identity自动增长,对DB2,MYsql,sql server数据库中相应的字段设置自动增长。
- sequence对Oracle数据库中相应的字段设置自动增长
- UUID采用UUID算法生成字符串唯一标识,UUID生成策略相对来说速度较快,不需要使用数据库相关的维护表的操作,但查找相对较慢。
- native根据数据库底层的描述,决定采用dentity,sequence中的一个
- assigned受冻分配主键,当generator没有设置时,采用这种方式。
- select使用触发器分配主键。
- foreign使用另外一个相关联的对象的标识符。通常和<one-to-noe>联合起来使用。
- oracle序列添加主键生成策略
- <id name=“custld”>
- <generator class=“sequence”>
- S_CUST_ID为序列名称
- <param name=“sequence”>S_CUST_ID</param>
- </generator>
- </id>
- 对象状态
- Transient(瞬时状态)当生成po对象时产生,数据库中没有相应的纪录,没有session对其进行管理。
- persistent(持久状态)当session对象调用saveorupdate()时,数据库中有与之对应的纪录,有session对象对之进行管理,当PO对象的值发生变化时,session对象让数据库记录与之同步。
- Detached(游离状态)当session事务提交时,数据库中有与之对应的纪录,从session一级缓存中清除,session对其不再进行管理。
- hibernate中get和load的区别
- 1,get为立即加载,调用get方法时,会马上执行sql将结果查询出来。load为延迟加载,调用load方法时,不回马上查询结果。而是当查询处来的对象在使用时,才会发出SQL语句查询结果。
- 2,当查询的主键不存在时,get方法返回null,load会抛出”对象未找到异常“。
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session(延迟加载)。一旦查询的对象不使用,不会真正查询数据库。这时,如果session关闭,再使用查询的对象,那么就会抛出该异常。
- 数据库一对一有两种关系
- 主键关联:从表的主键,同时又是主表的外键。从表没有dandy的外键列。
- 外键关联:从表中存在外键列,关联主表的主键列。但外键列是不重复的。
- 级联操作(all,none,delete,save-update)当当前对象执行某操作的情况下,其关联的对象也执行cascade 设置同样操作。
- cascade和inverse的区别
- cascade表示级联操,当主表纪录做操作时,从表纪录做相应的操作,维护的是纪录。
- inverse表示控制反转。当该属性设置为true时,表示由关联对象维护外键关系,当前对象不做外键维护,维护的是外键。一般来说,inverse设置在一方,外键由从表维护。
- 缓存
- 缓存就是数据库在内存中的临时容器。
- 位于数据库与数据库访问层中间。
- ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用。
- 避免了数据库调用性能的开销。
- 相对内存操作而言,数据库调用是一个代价高昂的过程。
- 缓存分类
- 一级缓存:即在当前事务范围内的数据缓存。如果查询同一个数据,将会在缓存中去找,只有session关闭之后才会重新调用数据库。
- 应用级(二级)缓存:即在某个应用中或某个独立数据库访问子集中的共享缓存,此缓存可由多个事物共享。
- 分布式缓存:即在多个应用实例,多个JVM间共享的缓存策略。
- Hibernate的延迟加载
- 在右关联的持久类对象中,对一个对象进行的查询也会向另一个对象进行查询。
- 所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
- 延迟加载类型:1,实体对象的延迟加载(load()) 2,集合的延迟加载(一对多和多对多时,关联集合) 3,属性的延迟加载(clob大数据类型时)。
- club 存放大文本的类型。
- blob 存放二进制的类型。
- Hibernate 的悲观荷乐观锁
- 多个用户可能同时读取或者更新一个数据
- 需要一些机制来保证这些数据载摸个操作过程中不会被外界修改,这样的机制,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。
- Hibernate支持两种锁机制 -’悲观锁’(Pessimistic Locking) -‘乐观锁’(Optimistic Locking).
- Read UnCommited没有提交,就能读到。
- insert,在没有提交的时候就能更新数据库。
- Read Commited提交读。提交之后,才可以更新数据库。不存在脏读。存在不可重复读。如果一个用户读出是张三,另一个用户改为李四,name第一个用户再读则是李四。存在虚读,用户查询数据时,两次查询的内容不一致未提交的写事务将会禁止其他事务访问该行。
- 悲观锁
- 每次在存取数据的时候,其他用户也会存取同一数据
- 对数据进行 锁定,知道自己操作完成以后
- 依靠数据库提供的锁机制
- 实现依赖于数据库机制,在整个过程中,将数据库锁定,其他任何用户不能对其读取和修改,一般适合于短事务,并发性好。
- 乐观锁
- 悲观锁保证操作独占性,性能开销巨大
- 乐观锁依靠数据库版本纪录机制实现
- 为数据库增加一个版本标示,增加一个version字段。
- 读取数据时,将版本号一同读出。
- 更新时,版本号加一。
- 将提交数据的版本与数据库表对应纪录的当前版本信息进行比对。
- 如果提交的数据,版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
1 0
- Hibernata的特点
- 关于hibernata的取出 查询出 count(*) 的值
- hibernata小技巧
- hibernata小技巧
- Hibernata一对多关系映射
- set集合特点级子类的特点
- JAVA的特点
- J2EE平台的特点
- 我国软件产业的特点
- ASP语言的特点
- 女人的特点
- JUnit的特点
- FreeBSD的功能特点
- log4j的一些特点
- Web Service 的特点
- XML的特点
- 咨询行业的特点
- 新帝国主义的特点
- Container With Most Water
- 微信公众号01: ase实现access_token的存储和被动刷新
- node.js实现简单的网络爬虫程序
- Hust oj 2118 Friend number(递推)
- ueditor1_4_3-utf8-jsp 配置实现上传图片的功能遇到的问题,改变图片上传请求地址
- Hibernata的特点
- jdk安装
- todo 基本设计模式
- jQuery 从零开始学习 (六) 工具函数
- Ueditor编辑保存的内容网页显示时背景等信息无效果---参考UEditor官方文档之编辑内容展示
- linux中守护进程启停工具start-stop-daemon使用介绍
- Android studio模拟器 Intel HAXM Intel virtualization technology(VT-x) is not turned on 解决办法
- 在jsp页面中添加富文本编译器(ueditor)+ 图片上传功能
- redis-缓存穿透与缓存雪崩