Assume that I have 2 objects A and B One to One related and B is nested under A. B is Lazy initialized and proxied and also I have an Entity Graph to fetch B eagerly when loading A as follows.
@NamedEntityGraph(name = "subGraph",attributeNodes = {@NamedAttributeNode("sub")})
public class A{
    Integer id;
    String name;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id", insertable = false, updatable = false)
    B sub;
}
public class B {
    int id;
    String description;
}
Let us have a stream of A queried from database and we are trying to set a DTO object and add to a DTO list:
1. List<ADto> dtoList = new ArrayList<>();
2.
3. aRepository.streamAll().forEach(a -> {
4.    ADto dto = new ADto();
5.    dto.setName(a.getName());
6.    dto.setSub(a.getB());
7. })
My question is:
If an instance of A does not have B (I mean SQL query with LEFT OUTER JOIN because of Entity Graph returns null fields for B) line 6 performs a second SQL query to database like
SELECT proxy_b_1.id, proxy_b_1.description FROM b as proxy_b_1;
Actually we already know that instance B under that specific instance A does not have value. It is shown also on debug mode. But why it makes a second SQL query? How can I mitigate this? I mean If I make an entity graph query that is enough for me if nested B exists. If does not exist do not perform an extra query. How can I do that?