小编Rém*_*rue的帖子

我们如何测试 JPA/Hibernate 中的 N+1 问题?

我有一个 N+1 问题,我想编写某种自动回归测试,因为它非常影响性能。

我想过监视 EntityManager 并验证它的方法createQuery()只调用一次,但是 Hibernate 不使用它来初始化惰性关系,因此它不起作用。我也可以尝试关闭我的存储库和我的服务之间的 JPA 事务(或分离我的实体)并寻找异常,但这确实是一个丑陋的想法。

为了给我们一个框架,假设我们有一个非常简单的父子模型:

@Entity
public class Parent {
    …
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
    private Collection<Child> children;
}

@Entity
public class Child {
    …
    @ManyToOne
    private Parent parent;
}
Run Code Online (Sandbox Code Playgroud)

还有一个非常简单的服务:

public class MyService {
    …
    public void doSomething(Long parentId) {
        Parent parent = …; /* retrieve Parent from the database */
        doSomeOtherThing(parent.getChildren());
    }
}
Run Code Online (Sandbox Code Playgroud)

从数据库中检索父级可以使用以下两个查询:

SELECT parent FROM Parent parent WHERE parent.id = :id;
SELECT parent FROM Parent parent …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa regression-testing

5
推荐指数
1
解决办法
542
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1

regression-testing ×1