给出这样的映射超类。
我的查询导致JPA一执行getResultsList()
就立即加载每个映射的类。
我没有访问与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个查询,以获取所有惰性值? 我在所有必需的类上都设置了断点,但无法弄清楚。
答案 0 :(得分:1)
如https://www.eclipse.org/eclipselink/documentation/2.5/concepts/app_dev007.htm
所述,对于某些懒惰的关系(如OneToMany和ManyToOne),还需要进行编织,并启用其他性能增强功能,如访存组和更改跟踪。编织通常在EE 7容器内自动进行,但需要额外的步骤才能在容器外部或非EE7容器中起作用。