我遇到了hibernate的问题。查询结果未更新。
我有一个简单的查询,它会检查customcable以查看'enabled'列是否为true。查询工作正常。但是当我将colum值从'true'更改为'false'并运行相同的查询时...它仍然会给我'true'作为结果。
如果我关闭应用程序并重新编译,然后再次运行查询,那么它显示为false,但如果我将其更改为true则再次显示..它仍显示“false”结果。我做错了什么?
public void isEnabled(String customer){
Session session = sessionFactory.openSession();
Transaction tx = null;
try{
tx=session.beginTransaction();
Query query = session.createQuery("FROM Customer WHERE enabled=true");
List qr = query.list();
boolean check = qr.iterator().hasNext();
boolean enabled;
sw = new ServerWriter(writer);
if(check){
for(Iterator itr = qr.iterator();itr.hasNext();)
{
Customer c =(Customer)itr.next();
enabled=c.geEnabled();
sw.sendMessage("Customer is enabled");
}
}else{
sw.sendMessage("Customer is not enabled");
}
} catch(HibernateException e){
if(tx!=null){tx.rollback();}
e.printStackTrace();
}finally{session.close();}
}
答案 0 :(得分:1)
首先你忘了关闭交易:
session.getTransaction().commit();
第二次查询时获得相同值的原因是Hibernate缓存。你总是有一级缓存,如果你配置它,你也可以有一个二级缓存。
您可以在执行查询之前刷新第一级缓存:
session.refresh()
如果您碰巧有二级缓存,可以使用此提示跳过它:
query.setHint("org.hibernate.cacheMode", CacheMode.IGNORE);