java - JPA 查询调用 getter 数百万次

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

谁能帮我理解为什么会这样?

最佳答案

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

关于java - JPA 查询调用 getter 数百万次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061292/

相关文章:

java - Hibernate 与 HSQLDB 和 Oracle

Java BufferedReader 接收空字符串

java - 关于制作TitleBar的一个问题

java - Android:类什么时候被系统卸载?

java - 尝试将 JSON 数据发布到 Spring Controller ..根本不起作用

java - 如何使用Spring操作生产数据库数据格式?

java - Hibernate OneToOne(optional=true) with FetchMode.JOIN 尝试重新选择空值

java - 如何使用 JPA+Hibernate 在 json 结果中包含连接列

java - 实体关系是否正确?

java - 将sql查询结果映射到DTO对象(具有内部列表)