gpt4 book ai didi

java - eclipselink 加载 n+1 关联,即使它们被标记为 FetchType.LAZY

转载 作者:行者123 更新时间:2023-12-02 10:33:12 24 4
gpt4 key购买 nike

给定一个像这样的映射父类(super class)。

一旦执行 getResultsList(),我的查询就会导致 JPA 加载每个映射的类。

我没有访问与订单或车辆关联的任何属性,但它们都立即延迟加载?

@MappedSuperclass
public abstract class PimaOrderComponentORM implements Serializable, EntityWithPK<Long> {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(@JoinColumn(name="PIMA_ORDER_ID", referencedColumnName="ID"))
private PimaOrderBE pimaOrder;
}

@MappedSuperclass
public abstract class PimaOrderORM implements Serializable, EntityWithPK<Long> {
@Id
@GeneratedValue(generator="SQ_PIMA_ORDER")
@SequenceGenerator(name="SQ_PIMA_ORDER", sequenceName="SQ_PIMA_ORDER", allocationSize=20)
@Column(name = "ID")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(@JoinColumn(name="VEHICLE_ID", referencedColumnName="ID"))
private VehicleBE vehicle;
}

每个类都有一个具体的实现。

使用 JPA 执行此查询时

        String esql = "SELECT p FROM PimaOrderComponentBE p WHERE p.pimaOrder.vehicle.id in :vehicles";
Query query = em
.createQuery(esql)
.setHint(QueryHints.JDBC_FETCH_SIZE, 1000)
.setParameter("vehicles", ids);
List<PimaOrderComponentBE> results = query.getResultList();

此时 20-30 个查询都已执行以获取所有惰性值?我已经在所有必要的类上设置了断点,但无法弄清楚。

最佳答案

某些惰性关系(例如 OneToMany 和 ManyToOne)需要编织,并启用其他性能增强功能(例如获取组和更改跟踪),如 https://www.eclipse.org/eclipselink/documentation/2.5/concepts/app_dev007.htm 中所述。

编织通常在 EE 7 容器内自动发生,但需要额外的步骤才能在容器外部或非 EE7 容器中运行。

关于java - eclipselink 加载 n+1 关联,即使它们被标记为 FetchType.LAZY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53483968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com