hibernate mysql 缓存_[转载]使用Hibernate实时读取数据库,不读缓存

由于读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,无法反映数据库中的最新状况。

因此,可以设置读取数据的模式,不用读取缓存,从数据库中直接读取,方法如下:

public List queryObjectsByHQL(String hql,

boolean queryFromCache) throws HibernateException

{

Session session =

getSession();

List list =

null;

try

{

Query

query = session.createQuery(hql);

//设置成CacheMode.IGNORE模式,在读取数据的时候,不和缓存交换数据,直接读取数据库。

//该方法仅仅修改本次会话的查询模式

if

(!queryFromCache)

{

query.setCacheMode(CacheMode.IGNORE);

}

list

= query.list();

}

catch (Exception

e)

{

System.out.println("查询失败:"

+ e.getMessage());

}

finally

{

session.close();

}

return

list;

}

hibernate读取数据库缓存问题

Hibernate采用二级缓存策略,其工作过程如下:

1) 条件查询的时候,总是发出一条select * from table_name where

….,一次获得所有的数据对象。

2) 把获得的所有数据对象根据ID放入到第二级缓存中。

3)

当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。

4) 删除、更新、增加数据的时候,同时更新缓存。

由于Hibernate是根据ID在两极缓存中先进行搜索,当插入或删除时ID有所改变,故所读的数据能及时更新,而更新数据库后由于相同的ID在缓存中仍能找到,因此再次读出时要把两级缓存关闭。

具体步骤为:

1)dao.getSession().clear();//先清除一级缓存

2)query.setCacheMode(CacheMode.IGNORE); //关闭二级缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值