我見過幾個類似的問題,0個很好的答案。JPA渴望加載FetchType.LAZY子集合
這應該很簡單。我正在使用Java JPA,並且我想要加載一個子實體列表,有時但不是全部。不幸的是,JPA似乎沒有聽我說我懶惰地取回它。我已經100%確定我的代碼中沒有任何地方以任何方式訪問childEntities屬性。但是,所有的子實體仍然在我的JPA.em()。find(..)調用中立即加載。這就是我如何聲明與註釋的關係。
@Entity
@Table(name = "parentEntities")
public class ParentEntity implements Serializable {
....
@OneToMany(mappedBy = "entityPropertyName", fetch = FetchType.LAZY)
public List<ChildEntity> childEntities;
...
}
這就是我如何加載父實體:
ParentEntity parentEntity = JPA.em().find(ParentEntity.class, id);
此外,我希望有時急於獲取此集合,並能夠動態地告訴JPA的時候這樣做。雖然這是第2步。步驟1只是爲了得到這個工作的權利。
你是如何驗證它是牽強?是否有orm.xml或其他位置映射或實體偵聽器可能會設置爲覆蓋惰性設置或觸發集合?你在使用什麼提供商? – Chris
在調試器中,我可以在查找調用後看到列表已填充。我沒有使用任何XML進行配置,只有註釋。 –
現在我已經創建了一個非常臃腫和hacky的解決方案。我創建了兩個父實體,一個具有子列表集合,另一個沒有。不幸的是,這種攻擊(如許多黑客所做的那樣)級聯到我的代碼的其餘部分。 –