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

Java eclipselink加载n+1个关联,即使它们被标记为FetchType.LAZY,java,jpa,eclipselink,Java,Jpa,Eclipselink,给定这样一个映射的超类 我的查询将导致在执行getResultsList后JPA加载每个映射类 我没有访问与订单或车辆相关的任何属性,但它们都立即被延迟加载 @MappedSuperclass public abstract class PimaOrderComponentORM implements Serializable, EntityWithPK<Long> { @ManyToOne(fetch = FetchType.LAZY) @JoinColumns(@

给定这样一个映射的超类

我的查询将导致在执行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)需要编织,并启用其他性能增强(如获取组和更改跟踪),如中所述


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

您如何知道它们立即被加载?您是否编织了您的类?EclipseLink-OneToOne和ManyToOne惰性关系需要编织来实现类中的更改请看除了ManyToOne映射之外,您还没有显示您的类-您没有偶然实现访问惰性属性的toString方法,是吗?@Chris,谢谢,不,我在测试中运行EclipseLink,没有编织。如果你把你的评论作为回答,我可以接受。