【发布时间】:2013-11-19 01:16:02
【问题描述】:
我一直在分析我的代码以试图了解瓶颈是什么,并且在运行数据库查询时遇到了一些相当奇怪的行为,我无法解释:
设置场景:
class Edge {
int from;
int to;
}
class Foo {
... //50 attributes
}
class Bar {
... //50 attributes
}
class EdgeDAO extends JpaDaoSupport {
List<Edge> getEdgesFrom(int from) {
Map<String, Integer> params = new HashMap<>();
params.add("from", from);
return getJpaTemplate().findByNamedParams("from Edge where from=:from, params);
}
}
分析时,我调用 DAO 方法 getEdgesFrom(int) 246 次。
我无法解释的一点是,JProfiler 报告了 getEdgesFrom(int) 的 246 次调用中,Foo 和 Bar 上的 50 个 getter 中的每一个都被调用了 4,820,124 次。 Foo 和 Bar 甚至不在 Edge 对象中。
谁能帮我理解为什么会这样?
【问题讨论】:
-
尝试调试并查看所做的查询(通过逐步调试最终检测到触发该查询的位置)。没有人告诉过这个方法调用了 Foo 和 Bar 实例的 getter。
标签: java spring hibernate jpa orm