Let's say you have a collection of `Car`

objects (database rows), and each `Car`

has a collection of `Wheel`

objects (also rows). In other words, `Car`

→ `Wheel`

is a 1-to-many relationship.

Now, let's say you need to iterate through all the cars, and for each one, print out a list of the wheels. The naive O/R implementation would do the following:

`SELECT * FROM Cars;`

And then **for each Car:**

`SELECT * FROM Wheel WHERE CarId = ?`

In other words, you have one select for the Cars, and then N additional selects, where N is the total number of cars.

Alternatively, one could get all wheels and perform the lookups in memory:

`SELECT * FROM Wheel`

This reduces the number of round-trips to the database from N+1 to 2. Most ORM tools give you several ways to prevent N+1 selects.

Reference: *Java Persistence with Hibernate* , chapter 13.