hibernate---实体三状态,与懒急加载
一、hibernate实体的三种状态:
1、瞬时状态
RoleBean role = new RoleBean(); 一个实体的瞬时状态------只存于内存中,与数据库无关
2、持久状态
session.save(role);保存数据库中 一个实体的持久状态------存于内存,也存于数据库 role.setName("学生");操作持久状态 tr.commit();提交并同步
注意:操作持久状态时,修改的是缓存中的数据,这样提交时缓存会和数据库同步,若数据不一致就会update数据库。前提必须有事务支持!
3、游离状态
session.close();
一个实体的游离状态-----内存中存在,数据库不一定存在
注意:游离状态与数据库断开连接,session缓存关闭,这时改变数据不会同步到数据库
二、hibernate的懒急加载
1、急加载
@Test public void get(){ RoleBean r = session.get(RoleBean.class, "4028821870e66d440170e66d46d70000");//直接查找数据库,并将返回数据放入缓存! System.out.println(r.getName());//从缓存中查找---可以查找 session.close();//与数据库断开连接 System.out.println(r.getName());//从缓存中查找---可以查找 }
重点:急加载直接查找数据库,将返回数据放入缓存中!无论session关闭否,都可以找到数据。
2、懒加载
@Test public void load(){ RoleBean r = session.load(RoleBean.class, "4028821870e66d440170e66d46d70000");//放入缓存,不会查找数据库! System.out.println(r.getName());//从数据库中查找,再把信息放入缓存(内存)------存在一级缓存 session.close();//与数据库断开连接(no-session) System.out.println(r.getName());//从缓存中查找!!---可以查找 /*RoleBean r2 = session.load(RoleBean.class, "4028821870e66d440170e66d46d70000");//放入缓存 session.close();//与数据库断开连接(no-session) System.out.println(r.getName());//从缓存中查找!!-----不存在一级缓存,所以查找不到 */ }
重点:懒加载查找数据不会查找数据库,先放入缓存!调用语法时再从数据库中查找数据,并放入缓存。若没有数据放入缓存,就找不到数据。