我有一个具有特定状态的域对象,在服务对象处理某个事件时,我需要检查与该状态匹配的所有实例。此事件可以相当频繁地发生,因此每次执行hibernate查询都是低效的。所以我有一些这些我在启动时存储并在需要时维护的集合。
我的问题是,如果我配置了休眠二级缓存,我是否可以对代码进行以下更改而不关心性能?
从:
public void handleEvent(SomeEvent someEvent) {
for (Entity entity : matchedEntitiesSet) {
// evaluate each entity for required changes. update state as needed
// persist any changes
}
// update my collection with the current repository result.
}
为:
public void handleEvent(SomeEvent someEvent) {
for (Entity entity : dao.getSomeEventsByCriteria(criteria)) {
// evaluate each entity for required changes. update state as needed
// persist any changes
}
}
实际上,我会改为使用DAO,而不是在我的服务中维护一组所述匹配的实体。
答案 0 :(得分:2)
是的,这正好是what the second-level cache / query cache。 Hibernate将比您更加一致和有效地处理它。您的探查器将帮助您调整缓存以满足您的参数。在您尝试优化应用之前,您确实对该应用进行了配置,对吧?
答案 1 :(得分:0)
看起来如果启用查询缓存和二级缓存,那么它应该可以正常工作。 http://www.javalobby.org/java/forums/t48846.html