【发布时间】:2020-08-31 13:15:24
【问题描述】:
我通过在许多实体上添加大量注释(例如@NamedEntityGraph 和@Fetch(FetchMode.JOIN) 等)解决了我的代码中的 N+1 问题,并且还
Hibernate 的属性(例如 MAX_FETCH_DEPTH)。
如何为这个新代码编写一个 junit 测试?我将 H2 用于涉及 JPA 的所有其他测试。
【问题讨论】:
我通过在许多实体上添加大量注释(例如@NamedEntityGraph 和@Fetch(FetchMode.JOIN) 等)解决了我的代码中的 N+1 问题,并且还
Hibernate 的属性(例如 MAX_FETCH_DEPTH)。
如何为这个新代码编写一个 junit 测试?我将 H2 用于涉及 JPA 的所有其他测试。
【问题讨论】:
加载实体,关闭会话,然后断言访问状态不会崩溃。
话虽如此,这是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
【讨论】: