gpt4 book ai didi

java - Hibernate @BatchSize 和 JPA Criteria API

转载 作者:行者123 更新时间:2023-12-01 10:10:46 26 4
gpt4 key购买 nike

这两者之间有不兼容吗?

我有一个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;
}

案例1

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

情况2

但是如果我这样做:

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 中详细集合没有批量加载。

环境:Wildfly 8.2.0.Final 和 Hibernate 4.3.7

最佳答案

在此链接上有一些有关批量获取的信息 mkyong .

要解决此问题,您可以使用 fetch .

我认为理解差异的关键是查看每次数据是如何加载的。按照标准,装载了一组大师,但em.find(class,id),每次只检索一个。我不完全确定这是否是原因,但也许有人可以带来更多线索。

关于java - Hibernate @BatchSize 和 JPA Criteria API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com