昨天工作中遇到了一个简单的问题,弄了好久,都怪自己没有好好的去了解hibernate,导致了这样的问题弄了两三个小时。
问题是这样的:我想即时更改数据,然后再查询
(1)用Spring的getHibernateTemplate.update来更新,
(2)然后用this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(select * ).addScalar.....查询。
我以为步骤(1)会更新到数据库。然而查询出来的数据一直不对。我以为是我的逻辑错误导致了数据的不正确,后来调试发现是由于数据根本
没有更新到数据库。
我上网搜索发现原因如下:
Hibernate缓存分为二级,第一级存放于session中称为一级缓存,默认带有且不能卸载。
第二级是由sessionFactory控制的进程级缓存。是全局共享的缓存,凡是会调用二级缓存的查询方法都会从中受益。只有经正确的配置后二级缓存才会发挥作用。同时在进行条件查询时必须使用相应的方法才能从缓存中获取数据。比如Query.iterate()方法、load、get方法等。必须注意的是session.find方法永远是从数据库中获取数据,不会从二级缓存中获取数据,即便其中有其所需要的数据也是如此。
参考:http://blog.csdn.net/woshichenxu/article/details/586361
http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html