When it's executed the line
Code:
Client client2 = (Client)session.load(Client.class, new Integer(clientid));
client2 has its dates, and a reference of its creditCards collection. There aren't CreditCard objects, because it's a lazy association.
Then, it's executed the line
Code:
Collection<CreditCard> list2 = client2.getCreditCards();
This return a list of CreditCards object, in one select is obtened all the CreditCards from the client.
The load lazy get all the object from the collection when the collection is hinted.
Regards