hibernate学习整理2——OID、session 缓存、主键生成

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
    }

当应用程序调用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: 根据数据库自动生成主键策略
(都可以叫做代理主键)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值