hibernate配置了二级缓存和查询缓存,在查询Problem实体时走缓存,但是getAnswers()时却不走缓存(能输出hql语句),也许有配置的地方 也许没有
请熟悉缓存配置的帮忙
[code="java"]@Entity
@Table(name="ask_problem")
@Searchable(alias = "problem")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Problem implements Serializable{
//省略属性和getter setter
@OneToMany(mappedBy="problem", cascade = { CascadeType.REMOVE })
@OrderBy("right DESC, answerTime ASC")
public Set<Answer> getAnswers() {
return answers;
}
public void setAnswers(Set<Answer> answers) {
this.answers = answers;
}
}[/code]
[b]问题补充:[/b]
这个问题已经找到答案 如下配置
[code="java"]@OneToMany(mappedBy="problem", cascade = { CascadeType.REMOVE })
@OrderBy("right DESC, answerTime ASC")
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //添加这句就ok了
public Set getAnswers() {
return answers;
}[/code]
可以参考http://www.iteye.com/topic/18904
如果从answers查problem应该就走缓存了,因为那是根据ID查询的。
从problem查answers,不走二级缓存。查询缓存命中率比较底,我们是很少用的。
简单说,二级缓存的key是ID,如果查询不是根据ID,就不走了。