当我更新表时,我面临一个奇怪的问题,当我尝试获取时,几秒钟后我仍然收到旧数据 . 当我再次使用相同的查询获取几秒后,我会收到刷新的数据 . 基本上我所看到的是返回新数据需要一些时间 .
我已经禁用了所有来自hibernate的缓存,同时取出我正在使session.clear()和标记查询为无法访问 .
我也查看了mysql查询日志,我发现hibernate正在查询mysql,但我收到的是旧数据 .
如何确保在任何给定的时间点我只收到刷新的数据
下面是我的hibernate配置文件
org.hibernate.dialect.MySQL5InnoDBDialect
true
jdbc:mysql://127.0.0.1:4804/aluminidb?autoReconnect=true
root
root
com.mysql.jdbc.Driver
false
false
org.hibernate.cache.NoCacheProvider
下面是获取对象的代码
@Override
public Alumini login(String email, String password) {
Session session=sessionFactory.openSession();
session.clear();
Transaction t;
try{
t=session.beginTransaction();
Query query = session.getNamedQuery("chkLogIn");
query.setParameter("email",email);
query.setParameter("password",password);
query.setCacheMode(CacheMode.REFRESH);
query.setCacheable(false);
List aluminiList=query.list();
if(aluminiList!=null && aluminiList.size()>0){
System.out.println(aluminiList.get(0).getLastUpdated());
t.commit();
return aluminiList.get(0);
}else{
t.rollback();
return null;
}
}finally{
session.close();
}
}
所以我正在清理会话,同样在我的配置中我已将所有缓存设置为禁用 . 当我更新记录时,如果我使用上述方法获取记录,那么我会在几秒钟内收到旧数据一次 . 之后,它给了我最新的数据 .