Hibernate的缓存问题
数据库、服务器集群
*
*Hibernate
*1.ORM对象关系映射(OjbectRelationMapping)
*通过反射机制对java的对象和数据库的关系进行映射操作
*生成SQL语句,通过JDBC对数据库进行对应操作
*
*2.持久化机制
*对象的三种状态
*临时状态:不在缓存中,不在数据库中
*new
*
*持久化状态:在缓存中,在数据库中
*saveupdateload
*
*游离状态:不在缓存中,在数据库中
*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语句
publicclass缓存的原理{
publicstaticvoidmain(String[]args){
Sessionsession=HibernateSessionFactory.getSession();
Transactiontrans=session.beginTransaction();
System.out.println("***********1");
Deptdept=newDept("设计部4");
System.out.println("***********2");
session.save(dept);//放入缓存中
System.out.println("***********3");
dept.setDepname("设计部4");
System.out.println("***********4");
trans.commit();
session.close();
}
}