更改后,hibernate查询结果不会更新

时间:2013-12-29 19:03:03

标签: java mysql hibernate

我遇到了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();}
}

1 个答案:

答案 0 :(得分:1)

首先你忘了关闭交易:

session.getTransaction().commit(); 

第二次查询时获得相同值的原因是Hibernate缓存。你总是有一级缓存,如果你配置它,你也可以有一个二级缓存。

您可以在执行查询之前刷新第一级缓存:

session.refresh() 

如果您碰巧有二级缓存,可以使用此提示跳过它:

query.setHint("org.hibernate.cacheMode", CacheMode.IGNORE);