[英]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.