给定这样的映射超类。
我的查询导致一旦执行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
编织通常在EE7容器内自动进行,但需要额外的步骤才能在容器外或非EE7容器中发挥作用。