繁体   English   中英

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

[英]eclipselink loading n+1 associations even though they are marked as FetchType.LAZY

给定这样的映射超类。

执行getResultsList()我的查询导致JPA加载了每个映射的类。

我没有访问与Order或Vehicle相关的任何属性,但是它们都被立即延迟加载了吗?

@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个查询以获取所有惰性值? 我在所有必需的类上都设置了断点,并且无法弄清楚。

织造需要一些懒惰关系,如一对多和多对一,并且使其它性能增强,如取基团和变更跟踪,如在描述https://www.eclipse.org/eclipselink/documentation/2.5/concepts/app_dev007.htm

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM