1
我有以下兩個實體的關係:JPA自動加載延遲集合
public class Category implements Serializable {
@Column(name = "caID")
private Integer caID;
@OneToMany(cascade=CascadeType.ALL,mappedBy="caID",fetch=FetchType.LAZY)
private List<Product> productList;
//..... GET and SET
}
public class Product implements Serializable {
@Column(name = "pID")
private Integer pID;
@JoinColumn(name = "caID", referencedColumnName = "caID")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Category caID;
//..... GET and SET
}
分類型號:
private List<Category> findCategoryEntities(boolean all, int maxResults, int firstResult) {
EntityManagerFactory eMF = null;
EntityManager eM = null;
try {
eMF = getEntityManagerFactory();
eM = getEntityManager(eMF);
Query q=eM.createQuery("SELECT ca FROM Category ca");
//Or using Criteria
//CriteriaQuery cq = eM.getCriteriaBuilder().createQuery();
//cq.select(cq.from(Category.class));
//Query q = eM.createQuery(cq);
if (!all) {
q.setMaxResults(maxResults);
q.setFirstResult(firstResult);
}
return q.getResultList();
} finally {
closeConnection(eM, eMF);
}
}
我想,如果我設置取listProduct的負載是懶惰型,這個屬性贏得」由實體管理器自動加載。但是當我調用方法'findCategoryEntities'並檢查productList時,它不是null?在使用Criteria之後,我仍然得到相同的結果。我如何獲得所有類別,但不能自動初始化productList?那麼如何設置productList,但不能再次初始化Category?
我是sory,我使用PersistenceUtil(返回true)方法'isFieldLoaded'檢查productList,或者使用getSize() (大於0),但未檢查相等空:D –
如果我使用Criteria並關閉EntityManagerFactory,productList將自動加載。爲什麼? –
您可以按照網址並閱讀「休眠時如何加載緩存」一節http://howtodoinjava.com/2014/09/26/lazy-loading-in-hibernate/。這可能會幫助您澄清延遲加載。如果您在關閉加載它的hibernate會話後訪問延遲加載的元素,則最終會出現LazyInitializationException –