与缓存相关的几个Hibernate问题:
EhCacheCacheProvider
。但是EhCache需要运行时类路径上的ehcache.xml
配置文件来配置缓存。我是否可以使用Hibernate L2缓存的特定名称来对ehcache.xml
中的微调进行微调?fizz.war
Web应用程序正在连接到MySQL服务器,并且正在管理持久性User
实例(对应于MySQL中的users
表)。目前,此用户的电子邮件是john.smith@example.com
。然后,同时buzz.war
(另一个网络应用)将同一users
条记录的电子邮件更新为jane.smith@example.com
。 Hibernate会自动更新User
实例以包含更新吗?答案 0 :(得分:0)
对于#1,几个想法:
或者,如果使用Hibernate 4.x,你可以使用evict *()方法作为org.hibernate.Cache接口的一部分(SesisonFactory中的方法仍在那里......但已弃用) (http://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/Cache.html#evictEntity(java.lang.String,%20java.io.Serializable)...So例如,从缓存区域中驱逐所有实体:
sessionFactory.getCache()evictEntityRegion(entitClass);
最后,很多更多地绑定到底层的Cache实现(因此不太推荐):你可以获得ehcache CacheManager对象(通常是单例)的句柄然后逐出条目方式...
CacheManager.getInstance()clearAll();
或
//remove things from a specific cache
CacheManager.getInstance().getCache("cache").remove();
对于#3,不,hibernate将不知道底层数据库后端是否被另一个应用程序更新(因此无法清除外部更新的该实体的l2缓存)...这可以追溯到到#1 ......你需要从buzz.war实体更新中智能地清除L2缓存(如果你正在使用分布式缓存,例如ehcache + terracotta,这是可能的......)
希望有所帮助。