JPA 查询调用 getter 数百万次
Posted
技术标签:
【中文标题】JPA 查询调用 getter 数百万次【英文标题】:JPA query calling getters millions of times 【发布时间】: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。 【参考方案1】:问题是FlushMode
设置为AUTO
。将此值更改为 COMMIT
解决了问题
【讨论】:
以上是关于JPA 查询调用 getter 数百万次的主要内容,如果未能解决你的问题,请参考以下文章