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();

}

}

相关推荐