Hibernate的缓存问题

数据库、服务器集群
*
* Hibernate
* 1.ORM 对象关系映射(Ojbect Relation Mapping )
* 通过反射机制对java的对象和数据库的关系进行映射操作
* 生成SQL语句,通过JDBC对数据库进行对应操作
*
* 2.持久化机制
* 对象的三种状态
* 临时状态: 不在缓存中,不在数据库中
* new
*
* 持久化状态 :在缓存中,在数据库中
* save update load
*
* 游离状态: 不在缓存中,在数据库中
* session.close()
* session.clear()
*
* hibernate将对象在三种状态之间转换的过程
* 缓存:
* 一级缓存:hibernate在内存单独开辟的保存持久化对象
* 的容器,其结构为HashMap
* 二级缓存:第三方的插件,通过可插拔的方式,将二级缓存
* 容器嵌入到Hibernate中进行管理
*
*
* 快照机制
* hibernate将数据库和缓存中建立快照
* 将数据库的的每一条记录生成持久化对象,建立快照
* 如果对持久化对象进行操作,当提交时,
* hibernate会将持久化对象和快照进行比对
* 1.没有改变 不会生成sql
* 2.改变属性, 生成update
* 3.缓存中没有 快照有 生成delete
* 4.缓存中有, 快照没有 生成insert
*
*
* 清理缓存机制
* session.flush() 清理缓存
* 将缓存中的对象和快照中进行比对的过程
* 清理缓存时生成对应的sql
*
* trans.commit() 提交sql
* 默认先调用session.flush()
* 再提交事务
//小例子,在控制台输出的sql语句
public class 缓存的原理 {
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
Transaction trans=session.beginTransaction();

System.out.println("***********1");
Dept dept=new Dept("设计部4");
System.out.println("***********2");
session.save(dept);//放入缓存中
System.out.println("***********3");
dept.setDepname("设计部4");
System.out.println("***********4");
trans.commit();
session.close();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值