| |||
| 异常: org.hibernate.MappingException: Unknown entity: com.lovo.bean.GradeBean 没有加映射! | ||
| 一对一有两种方式: 主键关联:从表的主键,同时又是主表的外键。从表没有单独的外键列 外键关联:从表中存在外键列,关联主表的主键列。但外键列是不重复
级联操作: 当全对象执行某操作的情况下,其关联的对象也执行cascade设置的同样操作。
cascade和inverse的区别 cascade表示级联操作,当主表记录做操作时,从表记录做相应的操作,维护的是记录。 inverse表示控制反转。当该属性设置为真时,表示由关联对象维护外键关系,当前对象不做外键维护,维护的是外键。一般来说,inverse设置在一方,外键由从表维护 | ||
|
什么是缓存?
缓存就是数据库数据在内存中的临时容器。
位于数据库与数据库访问层中间。
ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用。
避免了数据库调用性能的开销。
相对内存操作而言,数据库调用是一个代价高昂的过程。
| |||
| 缓存分类: 一级缓存:即在当前事务范围内的数据缓存 就Hibernate来讲,(一级缓存)事务级缓存是基于Session的生命周期实现的,session一旦关闭,一级缓存就清楚,一级缓存为hibernate自带的缓存,是必需的。 应用级(二级)缓存:即在缪戈应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个食物共享。 -在Hibernate中,应用级缓存由SessionFactory实现。 分布式缓存:即在多个应用实例,多个JVM间共享的缓存策略。 | ||
| clob 存放大文本的类型 blob 存放二进制数据的类型 | ||
|
| |||
| Hibernate支持两种锁机制 -“悲观锁 (Pessimistic Locking)" -"乐观锁 (Optimistic Locking)" | ||
| 延迟加载类型: 实体对象的延迟加载(load()) 结合的延迟加载(一对多,多对多时,关联集合) 属性的延迟加载(clob大数据类型时) | ||
|
| ||||
| 数据库隔离级别 Read UnCommited没有提交,就能读到。比如发出insert,在没有提交时就能更新数据库。 Read Commited提交读。提交时候,才可以更新数据库 不存在脏读。存在不可重复读。 如果一个用户读出是张三。另一个用户将该用户名改为李四,那么第一个用户再读则是李四 存在虚读,用户查询数据时,两次查询的内容不一致未提交的写食物将会禁止其他事务访问该行 Repeatable Read可重复读。 读取的事务将禁止写食物,写食物则禁止任何其他事务不存在不可重复读,但不能避免虚度。
悲观锁: 1:每次在存取数据的时候:,其他用户也会存取同一数据 2:对数据进行锁定,知道自己操作完成以后 3:依靠数据库提供的锁机制 实现依赖于数据库机制,在整个过程中,将数据锁定,其他任何用户不能对其读取和修改,一般适合于。。。
乐观锁: 悲观锁保证操作独占性,性能开销巨大 乐观需哦依靠数据版本记录机制实现: 为数据增加一个版本标示,增加一个version字段 读取数据时,将版本号一同读出 更新时,版本号加一 将提交数据的版本与数据库表对应记录的当前版本信息进行对比 如果提交的数据 版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。 | 数据库连接池: 每一次请求都要建立一次数据库连接。 没一次数据库连接,使用完后都得断开。 不能控制被创建的连接对象数。
频繁的数据库连接操作势必占用很多的系统资源,响应速度必定会下降。程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。系统西苑被毫无顾忌的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。 | ||
| ||||
| 连接池工作原理: 为数据库建立了一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。通过设定连接池最大连接数来防止系统无休止的数据库连接。更为重要的是可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。
工作原理: 持久层向连接池申请一个连接。连接池返回一个空闲连接。如果没有空闲连接,那么就检查连接池中的连接数量是否到达最大连接数。如果没有到达最大连接数,则建立新的连接对象放入连接池中。如果到达最大连接数,那么用户就需要等待。这时可以设置最大等待时间来控制用户的等待状态。等待时间内,有别的连接对象被释放,那么就分配给等待用户。如果超时,那么返回null。 | |||
| ||||
| hibernate常见的优化策略: 用高版本的hibernate。 制定合理的缓存策略。 采用合理的session管理机制。 尽量使用延迟加载。 如有可能,采用UUID作为主键生成策略。 如有可能,选用乐观锁代替悲观锁。 在开发中,显示hibernate执行的SQL语句,从而制定更好的实现策略。 复杂查询和统计查询可以使用SQL语句完成,甚至可以考虑使用存储过程完成。 | |||
|