Java eclipselink加载n+1个关联,即使它们被标记为FetchType.LAZY
给定这样一个映射的超类 我的查询将导致在执行getResultsList后JPA加载每个映射类 我没有访问与订单或车辆相关的任何属性,但它们都立即被延迟加载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(@
@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,没有编织。如果你把你的评论作为回答,我可以接受。