今天在程序里执行getHibernateTemplate.load(),查找数据的时候一直返回一个null,但是通过PL/SQL却可以查找的数据,非常疑惑。
最后发现原来是由于getHibernate的缓存机制造成的。
getHibernateTemplate的load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法仅仅在内部缓存中进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库。另外如果中途别人把数据库中的数据修改了,load如何在缓存中找到了数据,则不会再访问数据库,而get则会返回最新数据。
后来把load改成get之后就取到数据了。