【问题标题】:How to test-cover a solution of "N+1" problem of ORM?如何测试覆盖ORM“N+1”问题的解决方案?
【发布时间】:2020-08-31 13:15:24
【问题描述】:

我通过在许多实体上添加大量注释(例如@NamedEntityGraph@Fetch(FetchMode.JOIN) 等)解决了我的代码中的 N+1 问题,并且还 Hibernate 的属性(例如 MAX_FETCH_DEPTH)。

如何为这个新代码编写一个 junit 测试?我将 H2 用于涉及 JPA 的所有其他测试。

【问题讨论】:

    标签: java hibernate jpa junit


    【解决方案1】:

    加载实体,关闭会话,然后断言访问状态不会崩溃。

    话虽如此,这是Blaze-Persistence Entity Views 的完美用例。

    我创建了该库以允许在 JPA 模型和自定义接口或抽象类定义模型之间轻松映射,例如 Spring Data Projections on steroids。这个想法是您按照自己喜欢的方式定义目标结构(域模型),并通过 JPQL 表达式将属性(getter)映射到实体模型。

    您无需考虑实体图或实体级别的获取策略,如果您有多个用例,这可能会很困难,但可以专注于创建适当的 DTO,以准确地公开您真正需要的状态。

    Spring Data 集成让您可以像使用 Spring Data Projections 一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2015-09-19
      • 2011-02-05
      • 2015-12-03
      • 2011-07-22
      • 2021-08-27
      相关资源
      最近更新 更多