Hibernate框架(三)之一级缓存、快照机制、对象三种状态、对象标识、主键生成策略

主键生成策略

代理主键和自然主键的区别?
代理主键可以称之为逻辑主键,作用主要是区分数据库中的记录,不参与程序业务逻辑
自然主键可以称之为业务主键,不仅区分数据库中的记录还参数程序业务逻辑,一般设计都是有规律的。

名称value
native选择identity、sequence、hilo三种生成策略之一,适用代理主键
identity数据库本身提供自增长数据类型,适用于代理主键
sequencehibernate支持数据库生成序列,数据库要支持生成序列,如oracle数据库
hilo采用高低位算法:high、low适用于代理主键
uuid采用128位UUID算法生成标识符,编码为32位的十六进制字符串8-4-4-4-12
assignedjava程序负责生成标识如果不指定id的generator属性,则默认使用该主键生成策略

对象标识符(OID)

OID就是映射配置文件中对应数据库主键的标识

<id name="custId" column="cust_id">
	<generator class="native"></generator>
</id>

一级缓存(session缓存)

		缓存:内存中的临时数据。
		优势:减少和数据库交互的次数,从而提高效率。
		适用:经常查询并不经常修改的,数据一旦出现问题,对结果影响不大的
		不适用:只要经常修改的不适应,如银行汇率,股市牌价等

session对象就是hibernate的一级缓存,hibernate在执行查询操作时,将数据库查询的结果先放入一级缓存中然后再做处理。一级缓存存储的是查询的实体类对象。
在这里插入图片描述

快照机制

hibernate 内存区域起始分为两块,一块是用来存放session对象的一级缓存区域,另一块是快照区,当查询一条记录时,这条记录就被放到一级缓存区域中,然后想要对这条记录更改,则更改前的数据放入了快照区,更改后的数据放入了一级缓存区。最后提交事务时,比较两个区域的数据,如果相同不做更改,不同则保证一级缓存中的数据到数据库中。
在这里插入图片描述

hibernate对象的三种状态

瞬时状态:没有OID(对象标识符)和session没有关系;
持久关系:有OID,和session有关系,只有持久化对象的概念,才会有一级缓存;
托管状态:有OID,和session没有关系;
删除状态:有OID,和session有关系,同时调用了删除方法,即将从数据库中删除数据,但事务还没提交,此时对象的状态称删除状态。
在这里插入图片描述

/*
 * Hibernate对象状态
 * */
public class HibernateDemo8 {
	@Test
	public void test(){
		Session s = HibernateUtils.openSession();
		Transaction tr = s.beginTransaction();
		Customer c = new Customer();//瞬时状态
		c.setCustName("XXX");
		s.save(c);//持久化状态
		tr.commit();
		s.close();
		c.setCustName("TTT");//托管状态(脱离了session的管理)
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值