hibernate有4个级别的缓存策略:
1.只读缓存 : 数据进入缓存后数据不再改变
2.读写缓存:不太明白,大概的意思是更新数据后缓存也要重写 可以防止脏读
3.非严格读写缓存 :跟2类似吧 只是不需要考虑并发 可以接受脏读
4.事务缓存:可以避免并发导致的脏读
我配置了一个<cache usage="transactional"/> 好像是根本没有缓存数据
关于集合属性的缓存 :
如有这样一个关系:两个域对象 Question 和 QuestionOption 为 1:N关系
要缓存question id为1的选项questionOptions 这个集合属性
正确的做法是
而不是在QuestionOption.hbm.xml中添加 <cache usage="read-write" />
为什么这样呢 ? 我的推测是第一种情况实际上是用的查询缓存 添加后相当于query.setCachable(true);
而第二种是配置的二级缓存
1.只读缓存 : 数据进入缓存后数据不再改变
2.读写缓存:不太明白,大概的意思是更新数据后缓存也要重写 可以防止脏读
3.非严格读写缓存 :跟2类似吧 只是不需要考虑并发 可以接受脏读
4.事务缓存:可以避免并发导致的脏读
我配置了一个<cache usage="transactional"/> 好像是根本没有缓存数据
关于集合属性的缓存 :
如有这样一个关系:两个域对象 Question 和 QuestionOption 为 1:N关系
要缓存question id为1的选项questionOptions 这个集合属性
正确的做法是
<set name="questionOptions" ....>
<cache usage="read-write" />
......
</set>
而不是在QuestionOption.hbm.xml中添加 <cache usage="read-write" />
为什么这样呢 ? 我的推测是第一种情况实际上是用的查询缓存 添加后相当于query.setCachable(true);
而第二种是配置的二级缓存