gpt4 book ai didi

java - 左连接获取和预取

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:03 25 4
gpt4 key购买 nike

我有一个问题,当我们有像 Select DISTINCT A from A a left join fetch a.b 这样的查询时JPA 将填充对象 A,并预取与 a 为 oneToMany 关系的对象 b。预取到底意味着什么,因为当我调试这个对象时它有空值,并且数据库中有数据,所以我假设它是一个代理对象。代理是否包含从数据库预取的任何数据,并且只有当我实际调用 a.getB().size() 这样的方法时,它才会填充到 a.b 上?

我认为如果我使用“left join fetch”我就不需要调用a.getB().size(),但是如果我不这样做,对象b将保留作为代理,然后在表示层中如果任何对象调用b的任何属性,就会有一个空指针。

我还可以补充一点,这个 b 对象被映射为延迟加载,这就是我毕竟使用 fetch 的原因。 :) 另外,即使我使用“left join fetch”并调用 a.getB().size(),它也不会执行任何其他查询,对吧?预取将负责获取 b 的所有数据,...它只需要我调用一个方法,以便将数据从代理传输到实际对象?

提前感谢您的任何解释,这真的很困扰我......

最佳答案

这取决于您的 JPA 实现。

据我所知,至少对于 EclipseLink,如果您使用连接获取,该属性将始终被实例化,永远不会为 null。

关于java - 左连接获取和预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5520778/

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