当我在lazy-fetch集合中的每个元素上调用getXX()时,将发出多少个JDBC查询任务?

时间:2015-03-07 06:30:28

标签: hibernate jpa

假设我有一个List的懒惰抓取Member

@OneToMany
    List<Member> getMemberList() {
        return this.memberList;
    }

如果我在活跃的JPA会话中执行以下操作:

 List<Member> mList = obj.getMemberList();
    for (Member m : mList) {
        m.getName();
    }

我知道此操作的常见做法是调用mList.size()方法。我只是想知道当我迭代集合并在每个元素上调用getXX()方法时会发出多少个查询?我使用Hibernate作为JPA的提供商。

1 个答案:

答案 0 :(得分:0)

一个查询。

除非getName()方法也是懒惰的....在这种情况下'N + 1'查询。

但是,既然你在询问memberList,那就是1.列表的单个延迟加载(好的,最多可以获取限制/批量大小)。 size()方法并不神奇。常规用法(例如迭代)将触发延迟加载引用代理的“错误”并获取数据。