
休眠查询缓存依赖于辅助缓存. 启用查询缓存后,第一次执行查询时,Hibernate将查询结果存储在辅助缓存中. 再次执行查询时,只需从缓存中获取查询结果.
在休眠状态下配置辅助缓存

<prop key="hibernate.cache.user_query_cache">true</prop>
调用Query,Criteria接口的setCacheable()方法
@Cache定义了二级缓存策略和缓存范围

@Cache(
CacheConcurrencyStrategy usage(); //1
String region() default ""; //2
String include() default "all"; //3
用法: 当前缓存策略(NONE,READ_ONLYhibernate二级缓存注解,NONSTRICT_READ_WRITE,TRANSACTIONAL).
如果您的应用程序需要更新数据,则使用读/写缓存更为合适. 如果您的应用程序需要可序列化的事务隔离级别,则永远不要使用此缓存策略.

如果应用程序仅需要偶尔更新数据(也就是说,很少有两个事务同时更新同一条记录),并且不需要非常严格的事务隔离,那么最好使用一种非严格的读/写缓存策略.
Hibernate的事务缓存策略提供了完整的事务缓存支持,例如对JBoss TreeCache的支持. 这样的缓存只能在JTA环境中使用,必须指定其hibernate.transaction.manager_lookup_class属性.

region: 一个可选参数,用于指定辅助缓存的去域名. 默认值为类或集合的名称. 包括: 可选参数(全部,非延迟). 全部包含所有属性hibernate二级缓存注解,非惰性仅包含非懒惰属性
@javax.persistence.Entity
@Table(name = "PROVICE")
@Cache(usage =CacheConcurrencyStrategy.READ_ONLY)
public class Province() {
...
}
@javax.persistence.Entity
@Table(name = "PROVICE")
@Cache(usage =CacheConcurrencyStrategy.READ_ONLY)
public class Province() {//省份对象
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "cityId")
@Cache(usage = CacheConcrrencyStrategy.READ_ONLY)
private Set<City> cities; //省份对应城市
}
这一次访问省市时,Hibernate仅缓存城市的OID,因此仍然需要在实际查询过程中执行.
从cityid =?的城市中选择*
为避免此问题,您还可以为City对象配置辅助缓存.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159469-1.html
万年牢不是合理经济的设计
也许是之前中国放出去的
参与了