JDBC: lazy loading y objetos dependientes

Hola soy usuario nuevo y niubi.

Ayer empece a leer sobre jdbc y me vinieron dudas sobre la carga de objetos desde una base de datos y las referencias que guardan estos, no conozco bien los terminos asi que disculpen

Si en la base de datos tenemos registros que poseen referencias a otros registros como puede ser Cliente y Direccion y yo quisiera recuperar un listado de Cliente, podria tomar diferentes enfoques para cargar los objetos dependientes

1.- Al utilizar join y cargarlos todos de una vez (pero si solo quiero usar uno de los objetos )
2.- Cargar los objetos dependientes a medida que los vaya usando ( consultas por cada propiedad ? )
...
n ?
 
Cual es la forma apropiada de abordar este problema(al menos los es para mi :/ ) ?
Podrían dar ejemplos ?
Libros que oborden el tema ?

Habia leido que con hibernate solucionaban esto, pero deberian haber ejemplos sin frameworks por ahi (para poder entender)

De antemano muchas gracias