我一直在分析我的代码,试图了解瓶颈是什么,并且在运行数据库查询时遇到了一些相当奇怪的行为,但我无法解释它:
设置场景:
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
和 上的 50 个 getter 中的每一个。 >Bar
被调用 4,820,124 次。 Foo
和 Bar
甚至不在 Edge
对象中。
谁能帮我理解为什么会这样?
最佳答案
问题是 FlushMode
设置为 AUTO
。将此值更改为 COMMIT
解决了问题
关于java - JPA 查询调用 getter 数百万次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061292/