JPA查询调用getter数百万次

时间:2013-11-19 01:16:02

标签: java spring hibernate jpa orm

我一直在分析我的代码,试图了解瓶颈是什么,并且在运行数据库查询时遇到了一些相当奇怪的行为而我无法解释它:

设置场景:

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次调用中报告,FooBar上的50个getter中的每一个被称为4,820,124次。 FooBar甚至不在Edge对象中。

任何人都可以帮助我理解为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

问题是FlushMode设置为AUTO。将此值更改为COMMIT即可解决问题