[英]Hibernate @BatchSize and JPA Criteria API
這兩個之間不兼容嗎?
我有一個n + 1問題,我嘗試使用專有的hibernate @BatchSize注釋解決。
public class Master{
@OneToMany(fetch = FetchType.LAZY, mappedBy = "master", orphanRemoval = true, cascade = CascadeType.ALL)
@BatchSize(size=100)//how many item collections we want to load from <b>other<b> Masters currently in the PC
private Set<Detail> details;
}
public class Detail{
private Master master;
}
List<Master> masters = getMastersFromJPACriteria(complexParams);
assert(masters.size() == 3);
masters.get(0).getDetails().size();
它應該觸發詳細信息的批量收集負載:
SELECT * FROM DETAIL WHERE MASTER_ID IN (1,2,3)
但是我有(N + 1個問題):
SELECT * FROM DETAIL WHERE MASTER_ID = 1
但是,如果我在做:
m1 = entityManager.find(Master.class,1L);
entityManager.find(Master.class,2L);
entityManager.find(Master.class,3L);
m1.getDetails().size();
正確觸發:
SELECT * FROM DETAIL WHERE MASTER_ID IN (1,2,3)
我不明白為什么在情況1中未批量加載詳細信息集合。
Env:Wildfly 8.2.0.Final with Hibernate 4.3.7
我發現了問題。 我將CDI與綁定到請求范圍的實體管理器一起使用。 問題在於,在ejb上聲明了方法getMastersFromJPACriteria,並且在事務提交時刷新了我的實體管理器。 似乎Hibernate的Batch Collection Queue在會話刷新時已清除,即使在方法調用后我的主實體仍處於MANAGED狀態! 在本期中對此進行了解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.