Scenario: findAll() for 3 orders (2 items each), then read .getItems().size() on each in a loop — the pattern that looks completely ordinary in a service method. 1. select o1_0.id,o1_0.customer_id,o1_0.version from jpa_order o1_0 2. select i1_0.order_id,i1_0.id,i1_0.quantity,i1_0.sku from jpa_order_item i1_0 where i1_0.order_id=? 3. select i1_0.order_id,i1_0.id,i1_0.quantity,i1_0.sku from jpa_order_item i1_0 where i1_0.order_id=? 4. select i1_0.order_id,i1_0.id,i1_0.quantity,i1_0.sku from jpa_order_item i1_0 where i1_0.order_id=? total statements: 4 SELECT statements observed: 4 (1 for the orders themselves + 1 per order for its lazily-loaded items = N+1, here 1 + 3 = 4)