【发布时间】:2011-04-02 02:45:10
【问题描述】:
我有一个问题,当我们有像 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 的所有数据,...它只需要我调用一个方法,以便将数据从代理传输到实际对象吗?
提前感谢您的任何解释,这真的很困扰我......
【问题讨论】:
标签: java database jpa left-join