中易网

关于hibernate查询缓存的问题

答案:2  悬赏:50  
解决时间 2021-03-13 09:04
工程是MVC结构的,用hibernate修改数据之后,页面显示查询结果,反复刷新页面,查询的数据一会儿是修改之前的,一会儿是修改之后的(每个查询query也写了setCacheable(false))。即使是使用SQLQuery查询依然如此,请问有什么比较好的解决办法?

查询代码:
public List querystatus(){
List list=new ArrayList();
Session session=HibernateSessionFactory.getSession();
session.clear();
Query query=session.createQuery("from Stage where status=1").setCacheable(false);
list=query.list();
session.flush();
return list;
}
修改代码:
public void saveStage1(String stageno)
{
Session session=HibernateSessionFactory.getSession();
session.clear();
session.beginTransaction();
Stage stage=(Stage)session.get(Stage.class, new String(stageno));
stage.setStatus(1);
session.saveOrUpdate(stage);
session.getTransaction().commit();
}
最佳答案
一级缓存:查询过的对象都会放在一个与Session对象相关的容器中 再次查询时会检查容器中有没有 如果没有才会去数据库中查 来提高查询速度
二级缓存:与SessionFactory相关的容器来缓存对象SessionFactory在整个应用程序中只存在一个,程序启动时创建,关闭时销毁
全部回答
查询缓存,就是在内存建立空间用来保存上次查询结果,下次再进行同样的查询时,就不用再从数据库查找结果,大大的提高速度。 不过内存和数据库的数据没有完全同步,所以不适用于多个程序共同访问同一数据表的的情况;这样的话,数据表的数据已经被其他程序修改,有可能内存里存在的数据是旧数据,这就是所谓的脏数据。 而且hibernate和数据库的查询缓存,在对一个数据表记录进行修改时,会把有关这个表的全部查询缓存清空,以保证减少脏读问题。 所以查询缓存只适用于非多服务器同时访问的数据库,而且读取大大多于修改操作的数据表上
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天津市结婚在婚礼啊房子车子的问题上,男女双
洛阳市浩洋服饰有限公司在什么地方啊,我要过
卓尔不群 这个成语只能修饰人吗?
叉车怎么半坡起步
有26辆车车身长5米两车距离是8米车速为每分钟
作文:我发现了一一350字
白城兴达农机配件我想知道这个在什么地方
剑3充值活动前有通宝,充值活动期间消费的算不
为什么总有傻瓜要喜欢我
赣榆县联想电脑学校怎么样?
新桥坝这个地址在什么地方,我要处理点事
保质期到今天的面包还能吃吗?今天同事吃了说
话费记录怎么能清0???我妈我妈要查我手机
思达特科技有限公司地址有知道的么?有点事想
下真村在什么地方啊,我要过去处理事情
推荐资讯
饥荒手机版怎么造石炉
时风电动102十块电瓶的,充电4小时左右就显示
考试计算机,WORD打字排版,
全员加速中英文翻译
红豆薏米汤里能加红枸杞和黑枸杞吗
港东一街我想知道这个在什么地方
养鸡厂亏了,欠私人饲料钱十万,还不起要坐牢吗
易禾景观这个地址在什么地方,我要处理点事
特嘉鞋业在哪里啊,我有事要去这个地方
鑫华羊蝎子火锅店地址有知道的么?有点事想过
金和堂中医养生馆地址在哪,我要去那里办事
求花藤字体 悠幽星尒
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?