OID 对象映射标示符 :为了在系统中能够找到所需对象,我们需要为每一个对象分配一个唯一的表示号。在关系数据库中我们称之为关键字,而在对象术语中,则叫做对象标识(Object identifier-OID)。
OID 详细内容:https://baike.so.com/doc/1066375-1128214.html
session 缓存
缓存:介于应用程序和永久性存储数据源(如硬盘上的文件和数据库)之间,其作用是降低应用程序直接读写永久性数据存
储源的频率,从而提高应用的运行能。
缓存的物理介质通常是内存,永久性存储数据源的介质通常是硬盘或磁盘,应用程序读写内存的速度显然比读写硬盘的速度快。
缓存中存放的数据量非常大,也会使用硬盘作为缓存的物理介质。
一级缓存生命周期很短,和session生命周期一致,所以一级缓存也叫做session级缓存或事务级缓存
位于缓存中的对象处于持久化状态,它和表中的相关记录对应。所以每个实例也都具有唯一的OID,
作用是减少数据库访问,
从内存中取数据
在对象的判定上面 是以session缓存中 对象的OID标识符来进行判定,如果缓存中有,那么就在缓存取,没有还得去数据库中查找
//测试对象映射标识符
@Test
public void testOID(){
Student s1 = (Student) session.get(Student.class, Integer.valueOf(2));
Student s2 = (Student) session.get(Student.class, Integer.valueOf(3));
Student s3 = (Student) session.get(Student.class, Integer.valueOf(2));
System.out.println(s1==s2);false
System.out.println(s1==s3);true
}
//测试对象映射标识符
@Test
public void testOID(){
Student s1 = (Student) session.get(Student.class, Integer.valueOf(2));
Student s2 = (Student) session.get(Student.class, Integer.valueOf(3));
Student s3 = (Student) session.get(Student.class, Integer.valueOf(2));
System.out.println(s1==s2);false
System.out.println(s1==s3);true
}
当应用程序调用Session的save(), update(), saveOrUpdate(), load() 或get(),以及调用查询接口的list(), iterate()方法时,
如果在Session的缓存中还不存在相应的对象,Hibernate就会把该对象加入到一级缓存中。
清理缓存时, Hibernate会根据缓存中对象的状态变化来同步更新数据库。
evict(Object o):从缓存中清除指定的持久化对象
clear():清空缓存中所有的持久化对象
方法说明:
—session.clear()清空缓存中数据
—session.evict(obj) 剔除缓存中某对象
—session.flush()立即同步持久化数据到数据库
—
—调试代码(debug)以查看缓存数据:
—session——>persistenceContext——>entitiesByKey——>table
主键生成的策略: 为了保证数据唯一实例
代理主键和业务主键区别:
代理主键 基本上由数据库来进行支撑的。
业务主键 是由自己来进行定义的, 类似于身份证号
1.increment : 通过 hibernate自身自动以递增方式主键生成策略(先找到最大的,再加一)
Hibernate: select max(sid) from tt_student
Hibernate: insert into t_student (sname, sid) values (?, ?)
2.identity: 采用数据库提供的主键生成机制。(orcale数据库不支持)
3.sequence: 采用数据库提供的主键生成机制 (只支持oracle)
4.hilo: 算法实现的主键生成机制
5.native: 根据数据库自动生成主键策略
(都可以叫做代理主键)
Hibernate: insert into t_student (sname, sid) values (?, ?)
2.identity: 采用数据库提供的主键生成机制。(orcale数据库不支持)
3.sequence: 采用数据库提供的主键生成机制 (只支持oracle)
4.hilo: 算法实现的主键生成机制
5.native: 根据数据库自动生成主键策略
(都可以叫做代理主键)