由于业务的需要我们经常会使用hql单独更新某个对象的字段而不是使用update更新整个对象的所有字段,如果这时候再加载对象的时候由于有缓存加载的数据还没有更新成最新的状态,我们需要手动把对象从缓存中清除一下再加载。
hibernate有两层缓存一个session级的是第一层级缓存,这个一层的需要使用session.evict (object);清楚缓存。
session的get和load的区别除了对象不存在load报错外,他们的区别还在缓存机制上,get直接越过第二层缓存,load从先从缓存中获取,因此即使是使用get方法为了方式session级别的缓存得调用session.evict (object);get返回的对象是原始的实体对象,load返回的对象是代理对象。
在hibernate的session中还提供了clear,clear方法是清除session中所有的缓存对象。