![](/img/trans.png)
[英]Cache ignored using Spring 4 @Transactional + Hibernate 4 + EHCache
[英]Does Spring @Transactional use any Hibernate cache?
@Transactional
public MyEntity getEntity(long id) {
return dao.findOne(id);
//or select and update as well
}
每次调用事务方法时:我是否会从hibernate获取任何缓存实体(第一次除外)? 或者我是否总是从DB获取新鲜的实体?
这很重要,因为我将有两个独立的应用程序将共享相同的数据库,我想确保hibernate不返回任何缓存的实体,而另一个应用程序可能已经在后台更新了DB中的相同实体。
简短的回答是肯定的。
答案很简单:@Transactional所做的就是为你提供一个休眠会话,并开始/提交一个事务,如果配置的话。 它不关心会话是否启用了缓存。 缓存由会话在内部完成。
所以你需要的是理解hibernate缓存:
默认情况下启用一级缓存(每个会话),您无法禁用它,
默认情况下,二级缓存(每个SessionFactory)是禁用的,请参见此处如何启用Ehcache(只有@Cache带注释的实体最终在二级缓存中)。
无论@Transactional是打开新会话,还是将重用现有会话,都是可配置的,它取决于CurrentSessionContext实现。 您可以插入自己的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.